1.桃子问题
【问题描述】
某人摘下一些桃子,第一天卖掉一半,又吃了一个,第二天卖掉剩下的一半,又吃了一个,以后各天都是如此处理,到第n天发现只剩下一只桃子,试编写程序计算一共摘的桃子个数。
【输入形式】
一行:一个整数n(1 < n <= 1000)
【输出形式】
一行:一个整数,表示一开始的桃子个数。
【样例输入】
2
【样例输出】
4
#include<iostream>
using namespace std;
int main ()
{ int n,sum=1;
cin>>n;
for( ;n>1;n--){
sum=2*(sum+1);
}
cout<<sum<<endl;
return 0;
}
2.爬虫
【问题描述】
一条虫子在n英寸深的井底,每次一分钟爬行u英寸,但是它在再次爬行前必须先休息1分钟, 在休息过程中它将滑落d英寸,在反复向上爬行和休息后,多长时间虫子能爬出这口井?在此过程中,分钟的小数部分向上取整,如果攀爬结束时虫子正好到达井的顶部,则视为虫子已经爬出。假定d<u,n<100,当n=0时输入结束。
【输入形式】
输入包括多个测试用例。每行包含3个正整数n、u、d,为上面所提到的值。
【输出形式】
每个测试用例输入一行,表示虫子爬出井的时间。
【样例输入】
10 2 1
20 3 1
0 0 0
【样例输出】
17
19
#include <iostream>
using namespace std;
int main(){
int n,u,d,i=0,x;
while(true){
n=0;i=0;
cin>>n>>u>>d;
if(n==0){
break;
}
else {
x=(n-1)%(u-d);
if(x!=0){i=(n-1)/(u-d)*2+1;}
else{i=(n-1)/(u-d)*2-1;}
cout<<i<<endl;
}
}
return 0;
}
3.数小木块
【问题描述】
在墙角堆放着一堆完全相同的正方体小木块,如下图所示:
因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。
【输入形式】
只有一个整数 n ,表示这堆小木块的层数,已知1 <= n <= 100 。
【输出形式】
只有一个整数,表示这堆小木块的总数量。
【样例输入】
5
【样例输出】
35
#include<iostream>
using namespace std;
int main() {
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++) {
sum+=(i*i+i)/2;//第i层的木块数
}
cout<<sum<<endl;
return 0;
}
4.小X玩游戏
【问题描述】
小X在草稿纸上画了一行N(N>0)个格子作为棋盘, 制定了如下规则:格子从左到右依次编号为1到N,玩家初始位于格子1,初始前进方向为向右,游戏共进行M轮,第i轮玩家前进Ai(Ai>=0)格,若玩家到达格子N则改变前进方向为向左,若玩家到达格子1则改变前进方向为向右。
小X想知道玩家最后会停在哪个格子?
【输入形式】
第一行包含用一个空格隔开的两个整数N,M。
接下来M行,第i行包含一个整数Ai。
【输出形式】
第一行包含一个整数,表示玩家最后停留的格子编号。
【样例输入】
3 2
2
3
【样例输出】
2
#include<iostream>
using namespace std;
int main() {
int N,M,Ai,x,y,z=0,i,m,n;
cin>>N>>M;
i=M;
for(y=1; y<=i; y++) {
cin>>Ai;
z+=Ai;
}
m=z/(N-1);
n=z%(N-1);
if(n==0&&m%2==0) x=1;
else if(n==0&&m%2!=0) x=N;
else if(n!=0&&m%2==0) x=n+1;
else if(n!=0&&m%2!=0) x=N-n;
cout<<x;
return 0;
}
5.除法的精确计算
【问题描述】
输入两个正整数A和B,其中A和B都小于32767,求A/B的值,精确到小数点后N位(1<=N<=200)要求使用循环。
【输入形式】
输入只有一行,包括三个整数,分别为A、B和N。
【输出形式】
输出只有一行,包括一个数,这个数有N位小数。
【样例输入1】
10 3 10
【样例输出1】
3.3333333333
【样例输入2】
0 3 10
【样例输出2】
0.0000000000
#include<iostream>
using namespace std;
int main() {
int a,b,A,B,N,i;
cin>>A>>B>>N;
cout<<A/B<<".";//先输出整数部分和小数点
//for循环依次输出小数部分的每一位
for(i=1; i<=N; i++) {
if(i==1) {
a=(A%B)*10/B;
b=(A%B)*10%B;
}
else {
a=b*10/B;
b=b*10%B;
}
cout<<a;
}
return 0;
}
6.找12
【问题描述】
输入正整数n,编程输出所有1~n之间所有含有数字12或12的倍数的所有的数(如:24、112等)。
【输入形式】
输入正整数n
【输出形式】
从小到大输出所有的符合条件的数,数字和数字之间使用空格分隔。
【样例输入】
30
【样例输出】
12 24
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n,i;
double j;
cin>>n;
for(i=1;i<=n;i++){
if(i%12==0){
cout<<i<<" ";}
else{
for(j=2;i>=pow(10,j-1);j++){
if((i%(int)pow(10,j)-i%(int)pow(10,j-2))/(int)pow(10,j-2)==12)
{
cout<<i<<" ";break;
}
}
}
}
return 0;
}
//pow(x,y); //x的y次方
7.幸运数字
【问题描述】
今年圣诞节,小明收到了很多礼物,每个礼物上都有一个数字, 对小明来说,4或者7的倍数才是幸运数字。
现在,小明想知道所有数字中幸运数字之和是多少?
【输入形式】
第一行一个整数n,表示小明收到了n份礼物。
第二行包含n个正整数,表示各份礼物上的数字。
【输出形式】
输出小明心目中的幸运数字之和。
【样例输入】
6
12 13 14 15 16 17
【样例输出】
42
#include<iostream>
using namespace std;
int main() {
int n,sum=0;
cin>>n;
const int m=n;
int a[m];
for(int i=0; i<n; i++) {
cin>>a[i];
if((a[i]%4==0)||(a[i]%7==0)) sum=sum+a[i];
}
cout<<sum<<endl;
return 0;
}