ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

201912-1报数

2021-12-02 18:03:05  阅读:135  来源: 互联网

标签:10 题目 int return 201912 余数 报数


题目

题目链接:报数

这里给出题目的截图

image-20211202172111340

思路

这个题目很简单,我为什么会写上来呢?因为我真的很菜,做错了好多次(无声哭泣)。

那就来认真分析一下吧。

题目要求我们进行报数是吧,有7的或者是7的倍数的就要求跳过,最后统计出每个人跳过了多少次是吧。

既然只有四个人,那么我们用一个4个长度数组表示他们吧,开一个arr[4],然后数组具体的值就是他们跳过的次数,为什么可以这样子呢?这个报数的过程其实是一个四个长度的循环,超过4之后又会回来了。也就是说,如果这个数是4的倍数的话,那就刚好会报道第四个人就会结束,那如果不是,那余数就表示当前数是第几个人报的。比如说余数是3,那也就是说,要从头开始报三个人,那刚好就是第三个人报完嘛!

如果报当前数字的人要跳过,我去余数就知道他是第几个人了嘛(余数为0时表示是第4个人),这样子就可以进行统计啦!也就是执行

arr[k%4]++;

假设当前报数为7,那么我们取余,得到3,说明7是第三个人应该报的数,但是他要跳过,所以就是在他的跳过次数上加1.

image-20211202173045843

当然,题目还有另外一个考点啦,那就是怎么判断它是7的倍数或者出现了7呢?(我就错在了这里

7的倍数很简单了,对7取余就行了。

然后就是数字含有7怎么解决,我们采取将它的每一位取出来判断,怎么做呢?那就是不断地除以10,比如说100除以10等于10,再除以10就等于1,就相当于把百位数字取出来了。

好,那讲解就到这里,看代码吧。

代码

/**< 报数 */

#include <iostream>

using namespace std;

bool have_seven(int x) {
	if (x % 7 == 0)return true;
	else {
		while (x) {
			if (x % 10 == 7)return true;
			x /= 10;
		}
		return false;
	}
}
int n;
int arr[4];
int main() {
	cin >> n;
	int m = 1, k = 1;
	while (m <= n) {
		if (have_seven(k)) {
			arr[k % 4]++;
		} else m++;
		k++;
	}

	for (int i = 1; i <= 3; i++) {
		cout << arr[i] << endl;
	}
	cout << arr[0];
	return 0;
}

结语

哎,没想到自己连这种基础的题目也要写那么久,真的有一点心累了,看来这次认证是不能够达到自己的目标了。努力去考吧,实在不如愿的话来年再考一次。加油吧!

标签:10,题目,int,return,201912,余数,报数
来源: https://www.cnblogs.com/yongcheng137blogs/p/15634478.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有