问题 E: 聚聚的小游戏? (坑点:第二行输入字符串需要提前吃掉换行符)
问题描述:
聚聚写课程设计突发奇想做了一个益智(简单)小游戏。游戏中间有一部分是使用键盘W、A、S、D(分别代表上、左、下、右)来控制角色移动,现在游戏角色在原点,聚聚给你n个大写字母‘W’’A’’S’’D’,如果角色经过这n个操作后依然在原点请输出”YES”,否则输出”NO”(不带引号)。
输入:
第一行,一个正整数n,且n<=100
第二行,n个字符,每个字符是大写字母‘W’或’A’或’S’或’D’
输出:
一行,如果角色还在原点输出”YES”(不带引号),否则输出”NO”(不带引号)
样例输入:
8
WASDWASD
样例输出:
YES
原因分析:
第一次忘了要提前吸掉换行符
解决方案:
#include<stdio.h>
int main(){
int w = 0, a = 0, s = 0, d = 0; // 统计WASD的出现次数
int n, i;
char op;
scanf("%d%*c", &n); // 使用%*c吃掉行末换行 也可以 getchar();
for(i = 1; i <= n; i++){
scanf("%c", &op);
// 统计各种字符出现次数
if(op == 'W') w++;
else if(op == 'A') a++;
else if(op == 'S') s++;
else if(op == 'D') d++;
}
// 如果上下次数相等 且 左右次数相等,停在原点
if(w == s && a == d) printf("YES");
else printf("NO");
return 0;
}
问题 F: 聚聚的幸运数字 (失误点:将问题复杂化)
问题描述:
聚聚看起来AC了很多题而且正确率很高,但是聚聚喜欢把这些归结于“运气”。聚聚有自己的幸运数字:5141919。卷卷也想变得幸运但又不想和聚聚数字一样,卷卷想知道对于一个数字x能否由聚聚的幸运数字删掉其中任意个1得到。
输入:
一行,一个整数x(保证x不等于5141919)
输出:
如果可以则输出“YES”,否则输出“NO”。(不含引号)
样例输入:
51499
样例输出:
YES
原因分析:
思路:建立两个个数组,第一个数组记录?5141919 各个数字出现的次数,第二个数组存输入的整数的各个数字出现的次数,然后比较两个数组除1外各个数字出现的次数是否相同,再判断第二个数组1出现的次数比第一个数组少;
简单思路:直接枚举所有情况
?
解决方案:
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
if(n == 5499 || n == 51499 || n == 54199 || n == 54919 || n == 514199 || n == 514919 || n == 541919)
printf("YES");
else printf("NO");
return 0;
}
问题 H: 聚聚的Rating目标(失误点:代码复杂化)
问题描述:
聚聚今晚又在玩某大型多人开黑(?)写bug游戏,聚聚的评价是:寄,掉大分!(事实上聚聚每次这样说最后都会上大分)。出Rating(分数)后聚聚会设定新的Rating目标。聚聚认为如果一个数字的各位数字中非零数字不超过?1?个,则该数可以被作为一个Rating目标。
比如,600,10000,7?都是合理的Rating目标,而?12,3001,12345?则不是。
现在,聚聚知道自己的Rating,记作n,请你告诉聚聚距离下一个Rating目标还差多少分?
输入:
一行,一个正整数n,且n<=100000
输出:
一行,一个正整数,表示当前Rating距离下一个Rating目标有多少分。
样例输入:
2021
样例输出:
979
原因分析:
1.求最高位数字竟然还用了数组去求 (简单思路:直接求出位数,输入的数字/ 10的(位数-1)次方)
解决方案:
#include<stdio.h>
#include<math.h>
int main(){
int rat, r, ans, k, t = 0;
scanf("%d", &rat);
r = rat;
//求位数
while(rat){
t++;
rat = rat / 10;
}
//求出10的(长度-1)次方
k = pow(10, t - 1);
//求出结果
ans = ((r / k) + 1) * k - r;
printf("%d", ans);
return 0;
}
总结:
1.多注意细节性的问题,仍然需要加强字符类型的题目训练
2.不要老实硬解题,有没有巧的,简单的办法去解决.
|