牛客網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";
		
	}
	


	
} 

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