演算法入門經典(劉汝佳)陣列和字串 上機練習

2021-09-11 06:54:21 字數 2660 閱讀 6284

第一題、輸入一些學生的分數,哪個分數出現的次數最多。如有並列,從小到大輸出。

思路:先排序,排好序後,相同數字間序號的差值就是分數個數。

注意:1.題目沒有明確是不是任意輸入。如果不事先確認輸入分數個數的總數,後面會很不好處理資料。

2.flag是用來控制空格的輸入的。保證第乙個資料前沒有空格,最後乙個資料後沒有空格。

#include#include#define maxn 100+10

int a[maxn];

int main()

} }/*找出最多的次數*/

for(i=0;imax) max=j-i+1;

else break;

} }/*比較各個相等資料的序號差,找出與最大值相同的就是我們要找的*/

for(i=0;i第二題、輸入若干個單詞,輸出他們得到平均長度。單詞只包含大寫字母或小寫字母,用乙個或多個空格隔開。

思路:先用strlen獲取字串長度,遍歷字串,遇到空格,長度減一。判斷是不是乙個單詞以該字元前是空格,且該字元不為空格為標準。

#include#include #include#define maxn 1000

char a[maxn];

int main()

printf("%f",tot*1.0/count);

return 0;

}

#include

#include

#include

#define maxn 1000

char a[maxn];

int main()

printf("%f",tot*1.0/count);

return 0;

}如果用fgets

#include#include #include#define maxn 1000

char a[maxn];

int main()

printf("%f",tot*1.0/count);

return 0;

}

fgets和gets區別

#include#include #include #define maxn 1000

char a[maxn];

int main()

else if( a=='+' || a=='-' || a=='*' )

}y=sum;

if(c=='+') ret=x+y;

else if (c=='-') ret=x-y;

else ret=x*y;

printf("%d",ret);

return 0;

}

解法二

#include #include int main(int argc, char *ar**)

while (isspace(op)); /* 跳過空白字元 */

scanf("%d", &b);

if (op=='+') printf("%d\n",a+b);

if (op=='-') printf("%d\n",a-b);

if (op=='*') printf("%d\n",a*b);

return 0;

}

第五題、輸入乙個n*n的字元矩陣,左轉90度後輸出。

注意:scanf("%c",&c) 與 scanf(" %c",&c),後者只是在%前多了個空格,似乎沒有什麼區別,但使用起來區別是很大的。

scanf()作單字元輸入時規定只接收乙個字元,但它卻把回車符也作為字元對待的。這個回車符是放在緩衝區的,但是空格卻是直接忽略掉。

這就造成程式中第二次呼叫scanf("%c",&c)是從緩衝區中取乙個字元,把第一次呼叫scanf("%c",&c)後輸入的回車當作輸入字元了。

這就在輸入邏輯上造成了混亂。

有了scanf(" %c",&c)這個空格(換成\n或者\t也可以),這樣就把緩衝區中的回車當成第乙個字元,讀取後丟掉。

#include#include#define maxn 100

char a[100][100];

int main()

} printf("\n");

for(i=n;i>=0;i--) }

return 0;

}

第六題、進製轉換輸入基數b(2<=b<=10)和正整數n(十進位制),輸出n的b進製表示。

#includeint main()

for(i--; i>=0; i--)//i--是因為上乙個迴圈用了i++,所以這裡的i會比陣列大乙個單位。

printf("%d",a[i]);

printf("\n");

return 0;

}

第七題、進製轉換。輸入基b(2<=b<=10)和正整數n(n為b進製數),輸出n的10進製表示。

#include #include #include char a[100];

int main()

, ,,};

int main()

} }printf("\n");

return 0;

}

劉汝佳《演算法競賽入門經典》索引筆記

2015年4月30日 acm學習技巧 14 浮點數陷阱 18 include 22 fopen input.txt r stdin 25 ifdef 26 lld 29 大陣列在main外面宣告 34 memset a,0,sizeof a 35 count 濫用 40 linux換行符問題 41 ...

演算法競賽入門經典(劉汝佳) 習題2 4子串行的和

樣例輸入 2 465536 655360 0 0樣例輸出 case 1 0.42361 case 2 0.00001 分析 輸出保留5位小數 輸入包含多組資料 這意味著資料是成批的,是一堆放在一起的,需要自己確定那幾個資料是本次需要的 結束標記 n m 0,表示n和m中任意乙個都不為零 n6本題有陷...

演算法競賽入門經典 劉汝佳 第七章暴力

0 1 增量構造法 include include include include using namespace std int n,t 100 ans 100 void solve int cur,int tpre int main return 0 2 位向量法vis i 1表示選中t i 這...