2025
個人做法:
void searchMax(){
char ch[100];
while(scanf("%s",ch)!=EOF){
char max = 'a';
for(int i=0;i<strlen(ch);i++){
if(ch[i]>='a'&&ch[i]<='z'){
if(ch[i]>max) max = ch[i];
}else{
if(ch[i]+32>max) max = ch[i]+32;
}
}
for(int i=0;i<strlen(ch);i++){
printf("%c",ch[i]);
if(ch[i]==max||ch[i]==(max-32)) printf("(max)");
}
printf("\n");
}
}
答案是隻比較哪個字母的ascll碼大就是最大的字母,難道a比Z大嗎???個人覺得題目有待商榷
2030
該題做法基本都統一,利用漢字編碼特點進行篩選,並且是一個漢字兩個字節。
void totalChinese(){
int n;
scanf("%d",&n);
getchar();
while (n--) {
char str[255];
gets(str);
int sum = 0;
for(int i=0;i<strlen(str);i++){
if(str[i]<0) sum++;
}
printf("%d\n",sum/2);
}
}
但因爲編譯器或者系統環境問題,我在mac控制檯輸入的漢字根本統計不準確。
2039、2041、2044…
之所以將這些劃爲一類,並不是說這些題目是動態規劃或者遞推之類,而是明明思路和代碼都沒有問題就是不Accepted。
原因只在於變量類型問題,需要注意變量規模
2048
個人做法:
typedef long long ll;
int main() {
ll num[22];
num[1] = 0;
num[2] = 1;
for(int i=3;i<=20;i++){
num[i] = (i-1)*(num[i-1]+num[i-2]);
}
int c;
scanf("%d",&c);
while(c--){
int n;
scanf("%d",&n);
int sum = 1;
for(int i=2;i<=n;i++)
sum *= i;
double res = 100*num[n]/sum;
printf("%.2lf%%\n",res);
}
return 0;
}
始終過不去
對比了其他人的答案,發現一個問題類型轉換丟失了精度
需要修改double res = 100.0*num[n]/sum;
再對比半天,難道總數算的不對?最後終於發現階乘越界。
真的處處是坑!!!
結語
本來想整理完用作考前複習,結果也用不上了,後面也不打算對算法有什麼研究和學習,就這樣吧。