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种铺法
输入
一行一个整数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;
}