HAUT OJ 2021 新生周赛一 总结

问题 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.不要老实硬解题,有没有巧的,简单的办法去解决.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值