【2011年包河区小学区赛】四题详解

1.

描述

有一次,小高斯和很多同学在课间犯错误了,他们班刚学会自然数连续加法的运算。学校督学老师为了惩罚他们,就让他们计算1+2+3+…+99+100所有数字的累加和。否则不准回家吃中饭,聪明的小高斯经过一番思考很快就计算出来了!5050而其他小朋友还在辛苦的计算着。回家后,小高斯又在思考如果不是从1开始计算的连续自然数累加的和应该怎么去计算呢?

现在请你帮助小高斯计算N+…+M之和(1<=N<M<50000)

输入

数字N,数字M

输出

只有一个数字。N+…+M之和。

输入样例 1复制

1 3

输出样例1复制

6

提示

样例解释:

计算1到3的整数和:1+2+3=6

#include<bits/stdc++.h>//区赛给用万能头
using namespace std;
int main(){
	int n,m;
	long long cnt=0;
	cin>>n>>m;
	for(int i=n;i<=m;i++){
		cnt=cnt+i;//累加
	}
	cout<<cnt;
//这题不用前缀和的,累加就可以过,一开始我还想到前缀和去了
	return 0;
	}

2011年的题不要想太难

2.

描述

有一天,小高斯和同学做数学小游戏,游戏规则,给定一个由1、2、3、4、5、6、7、8、9,组成的数字串,看谁能以最快速度找出出现次数最多的数字。慢的同学就要往脸上贴个小纸条!为了不成为大花脸,小高斯想个巧妙的解决办法。几乎每次都是他赢,你能想出吗?

输入

一个数字串(长度不超过100)

输出

输出出现次数最多的一个数字或多个:

如果数字出现的次数相同,请按数字由小到大顺序,换行输出。

输入样例 1复制

1312233442

输出样例1复制

2
3
#include<bits/stdc++.h>
using namespace std;
int main(){//思想:桶计数
	string str;
	int tong[256]={0},maxn=-1,i;
	getline(cin,str);
	for(i=0;i<str.size();i++){
		tong[str[i]]++;
	}
	for(i='1';i<='9';i++){
		maxn=max(tong[i],maxn);
	}
	for(i='1';i<='9';i++){
		if(tong[i]==maxn){
			cout<<i-'0'<<endl;//这样写是因为会有相同出现次数,题目要求从小到大输出
		}
	}
	return 0;
	}

这题也很简单,就是桶

3.

描述

小高斯一直困惑人们在日常生活中为什么喜欢用十进制来表示数量,于是就想研究一下数字与数位每位数字之间的关系。一个正整数A(A的位数有可能很大),诸位拆开,计算一下每位数字相加之和。

例如:12345的所有位数之和是1+2+3+4+5=15

请你编写一个程序来帮助一下小高斯!

输入

一个数字A(A<=10^200) A 的最大位数为200位

输出

该数字的每个数位上的数字相加之和

输入样例 1复制

123

输出样例1复制

6

这题就不能用long long或int去做了,因为输入有两百位,就是用string去解决

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a;
	long long cnt=0;
	getline(cin,a);
	for(int i=0;i<a.size();i++){
		cnt+=a[i]-'0';
	}
	cout<<cnt;

	return 0;
	}
//其实字符串求和比数字还简单

4.

描述

小高斯热爱劳动,经常帮父亲整理家里的小花园,其中有一个2 * n的长方形砖墙面,需要使用一种1 * 2的长方形大瓷砖去贴墙。附近的一个老爷爷就走来问高斯:“像你家这样一面墙,能有多少种贴这种瓷砖的方法呢?”高斯想一想,很快就回答出来!事情传开后,大家都夸奖小高斯!

例如n=3时,为2 * 3方格,此时用1 * 2瓷砖铺满方格,共有3种铺法

题库3603.png

输入

一行一个整数n<=30

输出

一行一个整数 铺法

输入样例 1复制

3

输出样例1复制

3

 递归,公式如下:

如果n>2:f(n)=f(n-1)+f(n-2)

如果n=2:f(n)=2

如果n=1:f(n)=1

#include<bits/stdc++.h>
using namespace std;
long long f(int n){
	if(n==1){
		return 1;
	}else if(n==2){
		return 2;
	}else{
		return f(n-1)+f(n-2);
	}
}
int main(){
	int n;
	cin>>n;
	cout<<f(n);


	return 0;
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值