蓝桥杯---棋盘放麦子.猜生日

这篇博客介绍了两个编程问题:一是关于棋盘放麦子的数学问题,通过C++程序计算出所需麦粒总数,揭示了指数增长的惊人威力;二是猜生日谜题,通过循环和条件判断找到符合特定条件的日期,展示了编程解决实际问题的方法。
摘要由CSDN通过智能技术生成
1.棋盘放麦子

你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在第 22 个棋盘格放 22 粒麦子,在第 33 个棋盘格放 44 粒麦子,在第 44 个棋盘格放 88 粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 6464 格)。

国王以为他只是想要一袋麦子而已,哈哈大笑。

当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!

请你借助计算机准确地计算,到底需要多少粒麦子。

#include<bits/stdc++.h>
using namespace std;
unsigned long long total,count1 = 1;
int main()
{
	total += count1;
	for(int i = 1; i<=63; i++){// 1 : 2的1次方  2 : 2的2次方 2^0+2^1+...+2^63
		count1 *= 2;  // i = 1, count1:2  i = 2 count1: 4
		total += count1;
		//cout<<total<<endl;
	}
	
	cout<<total<<endl;
	return 0;
}

这个题如果使用double类型存储数据,运算时会出现精度损失的问题.可以使用 long long 类型,还得是无符号的才行,有符号的会越界.

2.猜生日

今年的植树节(2012 年 3 月 12日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”

“把我出生的年月日连起来拼成一个 8 位数(月、日不足两位前补 0)正好可以被今天的年、月、日整除!”

他想了想,又补充到:“再给个提示,我是 6 月出生的。”

根据这些信息,请你帮小明算一下,他叔叔的出生年月日。

格式是年月日连成的 88 位数。例如,如果是 1948 年 6月 12 日,就写:19480612

#include<bits/stdc++.h>
#include<sstream>
using namespace std;
int main()
{
	bool flag = false;
	int date;
	stringstream s;
	string day,year;
	string str;
	for(int i = 1900; ; i++){
		s.clear();
		s<<i;
		s>>year;
		s.clear(); 
		for(int j = 1; j <= 30; j++){
			str="";
			day = "";
			s<<j;
			s>>day;
			str = j <= 9 ? (year+ "060"+day) :(year+ "06"+day);//如果天数<= 9 需要补0. 
			s.clear();
			s<<str;
			s>>date;
			s.clear();
			if(date % 2012 == 0 && date % 3 == 0 && date % 12 == 0){
				flag = true;
				break;
			}
		}
		if(flag){
			cout<<date<<endl;
			break;
		}
		
	}
	return 0;
}

上面使用字符串来做太过于麻烦,看了别人的代码发现可以直接做.

#include<bits/stdc++.h>
using namespace std;
int date,m=6;
int main()
{
	for(int i = 1900; i < 2012; i++){//19480612。
		for(int j=1; j<=30; j++){
			date = i * 10000 + m* 100+j;
			if(date % 2012 == 0 && date % 3 == 0 && date % 12 == 0){	
				cout<<date<<endl;
				return 0;
			}
		}
	}
	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的大李子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值