描述
YY是个小屁孩,喜欢玩筷子。有天他发现若干根筷子可以搭成一些数字。如图:
(搭出数字1需要两个筷子,数字2需要5根筷子……) 现在就有疑问了,给定n(2<=n<100)根筷子,那个可以组成的最大数是多少?
输入
每行给定一个筷子数量n (2<=n<100)
输出
每行输出用这n根筷子所能组成的最大数字
输入样例 1
3
6
7
15
输出样例 1
7
111
711
7111111
仔细观察会发现2和3可以组成大于2的所有数字,也就是说,搭出的数字只有两根筷子和三根筷子可以表示的最大数数字(即 1,7),保证大那么位数肯定要尽可能的多,位数最多的情况就是2的倍数了,所以如果可以被2整除那么一定都是1,那么最大的位数为50位,普通的整数不一定可以存储,所以可以使用字符串存储,我们可以看到2的次数越多位数就越大,所以如果不能被2整除的话,那么就减去若干个3直到可以被2整除,然后7在前面1在后面组成数据即可
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
char sum[100];
memset(sum,0,sizeof(sum));
if(n==2)
{
cout<<"1"<<endl;
continue;
}
else if(n==3)
{
cout<<"7"<<endl;
continue;
}
else
{
if(n%2==0)
{
int cont;
cont=n/2;
for(int i=0;i<cont;i++)
sum[i]='1';
}
else
{
int cont1=0,cont2=0;
while(n%2!=0)
{
n-=3;
cont1++;
}
cont2=n/2;
int i=0;
for(i;i<cont1;i++)
sum[i]='7';
for(i;i<cont1+cont2;i++)
sum[i]='1';
}
}
for(int i=0;i<100&&sum[i]!=0;i++)
cout<<sum[i];
cout<<endl;
}
return 0;
}