1.輸入10個字元,輸出共有多少個A,B,C,…Z。
例:輸入ADAaEVSzaZ
輸出 A:4, D:1, E:1, S:1, V:1, Z:2 (ps.大小寫視為相同)
2.輸入一數字,以羅馬數字的方式輸出。(羅馬數字中M﹦1000, D=500,C﹦100,L=50,X=10,V=5,I=1)
第一題我的想法是用一個a[10]的陣列,輸入字元後,用if用判斷,然後用26個計數器分別計數,可是感覺沒什麼效率很笨的感覺?還是我的想法有誤?
第二題假設輸入數字是1234,就除以1000,做計數,剩下的餘數再除500,做計數,是這樣子嗎?
寫程式靠的是自己的思考 跟 經驗
所以既然都有想法了 怎麼不做做看呢
做出來了 就代表方法是對的
很多問題 其實都照自己的想法作出來直接去跑 程式就會給你答案了
跑來這問人 不是很沒效率嗎
我光看你一二題的思考就知道 你其實已經知道怎麼解題了
那既然知道 去跑跑不就知道嚕
就我個人的學習經驗 要問人的時機只有 1.沒頭緒卡住了 2.語法盲目
如果有想法 就先做 先試 試了出不來就改 在這修修改改的過程中 學的東西
會比其他人直接給答案 學的還多 而且記憶會很深
作都還沒做就先問 我個人覺得 這樣學程式設計 會學不好的
因為到真的要寫程式當成工作的時候
人家只會給你一個需求而已 怎麼寫 怎麼實作 都是靠自己想的
for(i=1 to 10)
{
if (A[i]==' ') continue; //若為空白就跳過
temp=1; //計數器歸一
for(j=i to 10)
if (A[i]==A[j]) { //若有相同則暫存值+1 且相同字元清除
temp++;A[j]=' ';
}
printf(" %c=%d ",A[i],temp); //輸出結果
}
ps.十幾年沒碰C語言了...語法細節沒記得那樣清楚,但是演算法是邏輯推論的東西反而不會遺忘,多思考就有多想法。
這個想法是類似於最基本的氣泡排序法,只是沒有調動前後順序,反而是統計與刪除相同數值。拿資料自己與相同的資料去比對,如果相同就將計數器加一,同時清除該資料,這樣可以節省第二輪比對時間與避免錯誤統計。這個方式程式執行速度會與內容有關,內容相同越多,執行迴圈就越少速度越快。而且不用浪費記憶體空間(現在寫程式還有人在乎嗎),邊執行邊輸出。
#include<stdio.h>
#include<stdlib.h>
main()
{
char a[10];
int b[26],i;
for(i=0;i<26;i++)
b[i]=0;
for(i=0;i<10;i++)
{
printf("輸入字元%d:\n",i+1);
scanf("%s",&a[i]);
}
for(i=0;i<10;i++)
{
if(a[i]=='A'||'a')
b[0]+=1;
else if(a[i]=='B'||'b')
b[1]+=1;
else if(a[i]=='C'||'c')
b[2]+=1;
else if(a[i]=='D'||'d')
b[3]+=1;
else if(a[i]=='E'||'e')
b[4]+=1;
else if(a[i]=='F'||'f')
b[5]+=1;
else if(a[i]=='G'||'g')
b[6]+=1;
else if(a[i]=='H'||'h')
b[7]+=1;
else if(a[i]=='I'||'i')
b[8]+=1;
else if(a[i]=='J'||'j')
b[9]+=1;
else if(a[i]=='K'||'k')
b[10]+=1;
else if(a[i]=='L'||'l')
b[11]+=1;
else if(a[i]=='M'||'m')
b[12]+=1;
else if(a[i]=='N'||'n')
b[13]+=1;
else if(a[i]=='O'||'o')
b[14]+=1;
else if(a[i]=='P'||'p')
b[15]+=1;
else if(a[i]=='Q'||'q')
b[16]+=1;
else if(a[i]=='R'||'r')
b[17]+=1;
else if(a[i]=='S'||'s')
b[18]+=1;
else if(a[i]=='T'||'t')
b[19]+=1;
else if(a[i]=='U'||'u')
b[20]+=1;
else if(a[i]=='V'||'v')
b[21]+=1;
else if(a[i]=='W'||'w')
b[22]+=1;
else if(a[i]=='X'||'x')
b[23]+=1;
else if(a[i]=='Y'||'y')
b[24]+=1;
else
b[25]+=1;
}
for(i=0;i<26;i++)
{
printf("%d\n",b[i]);
}
system("PAUSE");
}
內文搜尋

X