第一題、輸入一些學生的分數,哪個分數出現的次數最多。如有並列,從小到大輸出。
思路:先排序,排好序後,相同數字間序號的差值就是分數個數。
注意: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 這...