牛客网7-教417题解

题目大意
各个位只含4和7的数(比如74777,47,4444),要求各位之和等于n。求其中最小的那个。如果不存在,则输出“YingYingYing”。

题目思考
贪心:7的个数越多越好,因为这样位数少,即越优。此题肯定不能用int,long long 才存,所以只能借助字符串。

我们先求 最多需要多少个7,cnt7=n/7;然后对n取余7,这样余数只能在0~6中,根据余数的不同,需要拆解几个7。
什么意思? 假设对于 余数==3的情况,3+3*7=24是4的倍数,需要拆解3个7,这样这部分可以保证被4整除,即可以用6个4来填充。对应case 3的情况

#include<bits/stdc++.h>
using namespace std;

int n,cnt4=0,cnt7=0;

int main(){
	cin>>n;
	cnt7=n/7;//统计7的个数 
	int res=n%7;
	switch(res){
		case 0: break;
		case 1:cnt7--;cnt4+=2;break;
		case 2:cnt7-=2;cnt4+=4;break;
		case 3:cnt7-=3;cnt4+=6;break;
		case 4:cnt4++;break;
		case 5:cnt7-=1;cnt4+=3;break;
		case 6:cnt7-=2;cnt4+=5;break;
	}
	if(cnt7<0) cout<<"YingYingYing";
	else{
		for(int i=1;i<=cnt4;i++) cout<<"4";
		for(int i=1;i<=cnt7;i++) cout<<"7";
		
	}
	


	
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章