码迷,mamicode.com
首页 > 其他好文 > 详细

C - Lucky Numbers (easy)

时间:2018-06-01 20:41:17      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:under   script   space   ESS   size   index   least   暴力   lin   

Problem description

Petya loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn‘t contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

Lucky number is super lucky if it‘s decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.

One day Petya came across a positive integer n. Help him to find the least super lucky number which is not less than n.

Input

The only line contains a positive integer n (1?≤?n?≤?109). This number doesn‘t have leading zeroes.

Output

Output the least super lucky number that is more than or equal to n.

Please, do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specificator.

Examples

Input
4500
Output
4747
Input
47
Output
47
解题思路:题目要求输出不小于n的最小整数,这个整数要求只含有4和7这两个数字,并且4出现的次数等于7出现的次数。暴力打表(大概2分钟),水过!
打表代码:
 1 #include<iostream>
 2 using namespace std;
 3 typedef long long LL;
 4 bool judge(LL x){
 5     int t1 = 0, t2 = 0;
 6     while (x){
 7         int a = x % 10;
 8         if (a != 4 && a != 7)return false;
 9         if (a == 4)t1++;
10         if (a == 7)t2++;
11         x /= 10;
12     }
13     if (t1 == t2)return true;
14     else return false;
15 }
16 int main(){
17     for (LL i = 47; i < 10000000000; ++i)
18         if (judge(i)){ cout << i << ,; }
19     return 0;
20 }
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL n,obj[]={47,74,4477,4747,4774,7447,7474,7744,
 5         444777,447477,447747,447774,474477,474747,474774,
 6         477447,477474,477744,744477,744747,744774,747447,
 7         747474,747744,774447,774474,774744,777444,44447777,
 8         44474777,44477477,44477747,44477774,44744777,44747477,
 9         44747747,44747774,44774477,44774747,44774774,44777447,
10         44777474,44777744,47444777,47447477,47447747,47447774,
11         47474477,47474747,47474774,47477447,47477474,47477744,
12         47744477,47744747,47744774,47747447,47747474,47747744,
13         47774447,47774474,47774744,47777444,74444777,74447477,
14         74447747,74447774,74474477,74474747,74474774,74477447,
15         74477474,74477744,74744477,74744747,74744774,74747447,
16         74747474,74747744,74774447,74774474,74774744,74777444,
17         77444477,77444747,77444774,77447447,77447474,77447744,
18         77474447,77474474,77474744,77477444,77744447,77744474,
19         77744744,77747444,77774444,4444477777};
20 int main(){
21     cin>>n;
22     for(int i=0;;++i)
23         if(obj[i]>=n){cout<<obj[i]<<endl;break;}
24     return 0;
25 }

 再贴另一种很好理解的递归写法(反正我没想到QAQ,不过代码思路真的很溜,值得学习一下,涨一下见识)AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL n,ans=1LL <<60;
 5 void f(LL x,int y,int z){//通过x构造答案,y是4的个数,z是7点个数
 6     if(x>=n && y==z)ans=min(ans,x);//答案ans满足要求:1.大于等于n  2.只存在7和4,且7的个数等于4的个数
 7     if(x>n*100)return;//答案肯定在n和n*100之间,所以x>n*100的时候退出;
 8     f(x*10+4,y+1,z);//当前答案x加一位数4
 9     f(x*10+7,y,z+1);//当前答案x加一位数7
10 }
11 int main(){
12     cin>>n;
13     f(0,0,0);
14     cout<<ans<<endl;
15     return 0;
16 }

 

C - Lucky Numbers (easy)

标签:under   script   space   ESS   size   index   least   暴力   lin   

原文地址:https://www.cnblogs.com/acgoto/p/9123222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!