大家好!今天我们来看一道题目,叫做数字圈。
先来看题目
题目描述
当我们写数字时会发现有些数字有封闭区域,有的数字没有封闭区域。
数字 0 有一个封闭区域,数字 1、2、 3 都没有封闭区域,数字 4 有一个封闭区域,数字 5 没有封闭区域,数字 6 有一个封闭区域,数字 7 没有 封闭区域,数字 8 有两个封闭区域,数字 9 有一个封闭区域。
现在你要构造一个最小的非负整数,使得它的各位数字的封闭区域的数量加起来的总和恰好等于 K。
输入格式
一个整数 K。 1 <= K <= 2500
输出格式
满足题意的最小的非负整数。
样例
输入数据 1
40
Copy
输出数据 1
88888888888888888888
Copy
输入数据 2
1
Copy
输出数据 2
0
Copy
输入数据 3
2
Copy
输出数据 3
8
思路很简单:
首先题目要求我们去满足情况的最小值,那解药先考虑位数问题,从题目之中可以的出只有数字8有两个封闭区,所以我们要尽量多用8,但有可能有特殊情况,比如:为1,就要输出1,然后退出程序;还有有余数的情况,剩下的就都用4即可。
代码实现:
#include<iostream>
#include<fstream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
long long n,a[10000],k,l,m;
int main()
{
cin>>m;
if(m==1)
{
cout<<"0";
return 0;
}
else
{
k=m/2;
l=m%2;
if(l>0)
{
cout<<"4";
}
for(int i=1;i<=k;i++)
{
cout<<"8";
}
}
return 0;
}