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;
再对比半天,难道总数算的不对?最后终于发现阶乘越界。
真的处处是坑!!!
结语
本来想整理完用作考前复习,结果也用不上了,后面也不打算对算法有什么研究和学习,就这样吧。