Crazy Number
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给定一个整数 n ,把 n 分解成从 1 开始连续的若干个整数(最大为 9)及 n' 的和,即 n = 1 + 2 + 3 + ... + 9 + n',直到 n’ 为 0 时停止分解。
例如:给定 n = 9 时:
- 第一次分解:9=1+2+3+n'(9 < 1+2+3+4,因此最多只能分解为 1+2+3+n',剩余值 n' 作为下一次分解的 n)。
- 第二次分解:3=1+2。
Input
输入数据有多组(数据组数不超过 2600),到 EOF 结束。
对于每组数据,输入一行,包含一个整数 n (0 <= n <= 2575)。
Output
对于每组数据:
- 第一行输出 ”Case #t:”,t 从 1 开始计数。
- 接下来输出分解的结果,每个结果占一行。特别地,当 n = 0 时,分解结果仅在一行中输出一个 "0"。
Example Input
1 9 46 55 0
Example Output
Case #1: 1=1 Case #2: 9=1+2+3+n' 3=1+2 Case #3: 46=1+2+3+4+5+6+7+8+9+n' 1=1 Case #4: 55=1+2+3+4+5+6+7+8+9+n' 10=1+2+3+4 Case #5: 0
Hint
Author
「2016级《程序设计基础(B)I》期末上机考试-第一场」MLE_kenan
#include <stdlib.h>
int main()
{
int t=1,n,i,s;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
printf("Case #%d:\n0\n",t);// n有两种情况 认真读题,把示列搞清楚,情况分清楚
else
{
s=0;
printf("Case #%d:\n",t);
while(1)
{
printf("%d=",n);
for(i=1; s+i<=n&&i<=9; i++)
{
s=s+i;
if(s<=n)
{
if(i==1)
printf("%d",i);
else printf("+%d",i);
}
}
if(s==n) //若n==9时,3=1+2时结束
{
printf("\n");
break;
}
else if(s<=n) 当n==9时,第一趟完了以后,s=6
{
n=n-s; //n需要更新,紧接着输出+n',明白下一步
printf("+n'\n");
s=0; //清零操作,下一组也是由0开始
}
}
}//这里为break跳出的地方
t++;
}
return 0;
}