题目链接:https://ac.nowcoder.com/acm/contest/3530/C
题目描述
咚咚咚!在安静的7教417夜晚,车神带来了一堆神秘的数字。
而417的小伙伴都只钟爱于包含4和7的数字。
例如数字:747,4,7747,4,7是他们钟爱的数字,而476,5,27476,5,27不是。
车神灵机一动,突然问:对于给定的数字n,能否找出各个数位上数字和为n的最小钟爱数字。
如果找到则输出这个最小数, 如果找不到,则输出“YingYingYing”。
输入描述:
一行,一个整数n(1 ≤ n ≤ 1e6) 代表要求车牌号的各个数位上数字的和
输出描述:
输出仅一行,为满足条件的最小车牌号,如果不存在这个车牌号就输出“YingYingYing”。
示例1
输入
11
输出
47
示例2
输入
10
输出
YingYingYing
题意就是一个数只由4和7构成,现在给出一个n,要让这个数每一位相加得到的和等于n,问是否存在这个数,并且要让这个数尽可能的小。
思路:首先这个数只有4和7,如果要让这个数尽可能的小,根据贪心,就需要让7出现的尽可能多(因为7出现的多就可以减少这个数的位数),所以可以枚举7出现的次数,然后n减去7乘以它出现的次数,就是4出现次数的总和,然后判断此时能否被4整除,最后求出能满足情况的7出现的最多次数。输出的话只需要让4全部在前面,7全部在后面就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
const int N=1000100;
#define ll long long
#define mod 1000000007
int main() {
int n;
cin>>n;
int a=0,b=0;
for(int i=0;i<=n;i++)
{
if(i*7>n) break;
if((n-i*7)%4==0)
{
a=i;
b=(n-i*7)/4;
}
}
if(a==0&&b==0) cout<<"YingYingYing"<<endl;
else
{
for(int i=0;i<b;i++)
cout<<"4";
for(int i=0;i<a;i++)
cout<<"7";
cout<<"\n";
}
return 0;
}