数字的空洞
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 209 测试通过 : 120
总提交 : 209 测试通过 : 120
题目描述
在个位数中:0,4,6,8,9有一个共同的特征:数形上存在空洞,其中8有两个相切的空洞。 一个非负整数具有多个空洞,给定一个空洞数目h(0 ≤ h ≤ 510),请你写一个计算机程序来找出能产生这些空洞的数,要求数应尽可能小,且无前导零。
输入
一行输入一个非负整数h,表示空洞的数目。
输出
能产生这些空洞的最小数。
注意:输出部分的结尾要求包含一个多余的空行。
样例输入
0
1
15
70
样例输出
1
0
48888888
88888888888888888888888888888888888
题目来源
“IBM南邮杯”个人赛2009
思路还是很清晰的,特别情况就是h=1和h=0的情况,其他都可以用统一的方法处理,6是用不到的。实现代码如下:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=510+10;
char a[N];
int h;
int main()
{while(scanf("%d",&h)==1){int cnt=0;if(h==0){printf("%d\n",1);}if(h==1){printf("%d\n",0);}if(h>=2){int p=h/2;for(int i=1;i<=p;i++){a[cnt++]='8';}h=h-p*2;if(h==1){a[cnt++]='4';}for(int j=cnt-1;j>=0;j--){printf("%c",a[j]);}printf("\n");}}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。