分发糖果
发布时间: 2018年3月20日 21:38 时间限制: 1000ms 内存限制: 128M
描述
为了热烈庆祝问题求解与编程开课,任课老师徐老师准备小小奖励下选课的同学,她决定给同学们发糖果,发糖果顺序就按照第一次实验的排名来发。
徐老师给第一名同学发所有糖果的一半多一颗,给第二名同学发剩下糖果的一半多一颗,按这个规律一直发下去,发现最后一名同学发到一颗糖,发完后糖果没有剩余。
徐老师只知道有N名同学参加了这次实验,她想让你帮她算下一共发了多少颗糖果。
输入
输入的第一行是一个整数T(0<T<=50),表示接下来有T组数据,每组数据占一行,每组数据输入为一个整数N(1<=N<=30)。
输出
对于每组数据,输出占一行,首先输出“Case #id: ”,表示是第id组数据(注意冒号后面有一个空格),然后输出糖果总数。
样例输入1
3 1 2 4
样例输出1
Case #1: 1 Case #2: 4 Case #3: 22
————————————————————————————————————————————————————
以上为原题~
本题因为数据不多,我采用打表方式做出 以下是AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int a[35],sum[35];
int solution1()
{
a[1]=1;
for(int i=2;i<=30;i++)
{
a[i]=2*(a[i-1]+1);
}
}
int main()
{
int n;
scanf("%d",&n);
solution1();
for(int i=1;i<=n;i++)
{
int N;
scanf("%d",&N);
printf("Case #%d: %d\n",i,a[N]);
}
}
以下是标程:
#include<cstdio>
#include<cstring>
int main()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int t,i,j=0;
scanf("%d",&t);
while(t--)
{
int n,sum=1;
scanf("%d",&n);
for(i=1;i<n;i++)
sum=(sum+1)*2;
printf("Case #%d: %d\n",++j,sum);
}//没有本质差别,但是我过度依赖打表还是不太好....
return 0;
}
本题签到