蓝桥杯 算法提高 数字黑洞
2017-10-06 15:21
274 查看
算法提高 数字黑洞
时间限制:1.0s 内存限制:256.0MB
问题描述
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入格式
一个四位整数,输入保证四位数字不全相同
输出格式
一个整数,表示这个数字经过多少次变换能得到6174
样例输入
4312
样例输出
3
直接看代码吧,注释好了。
算法提高 数字黑洞
时间限制:1.0s 内存限制:256.0MB
问题描述
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入格式
一个四位整数,输入保证四位数字不全相同
输出格式
一个整数,表示这个数字经过多少次变换能得到6174
样例输入
4312
样例输出
3
时间限制:1.0s 内存限制:256.0MB
问题描述
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入格式
一个四位整数,输入保证四位数字不全相同
输出格式
一个整数,表示这个数字经过多少次变换能得到6174
样例输入
4312
样例输出
3
直接看代码吧,注释好了。
#include<iostream> #include<vector> #include<algorithm> //sort()函数 using namespace std; int main() { vector<int>vi,t1,t2,t3; int n,i; cin >>n; //输入一个四位数 while(n>0){ vi.push_back(n%10); //求余 每一位 进栈 n/=10; } int count=1; //计数器 我从1开始计数,因为变到6147的时候程序就退出了 while(1){ sort(vi.begin(),vi.end()); //升序排序 for(vector<int>::iterator it=vi.begin();it!=vi.end();it++) //也可用下面的下标,只是想练习迭代器。 t1.push_back(*it); //把升序后的放入 t1 容器 可自己打印看看 reverse(vi.begin(),vi.end()); //降序排序 以下同上 for(vector<int>::iterator it=vi.begin();it!=vi.end();it++) t2.push_back(*it); // 降序进 t2 容器 for(i=t2.size()-1;i>=0;i--){ //两数相减 注意!!! 从低位开始相减 //cout <<"t2=="<<t2[i]<<endl<<"t1=="<<t1[i]<<endl<<endl; int t=t2[i]-t1[i]; if(t<0){ //每一位相减,如果小于0,向大位借一 t2[i]+=10; //本位加10 t2[i-1]--; //大位减一 } t3.push_back(t2[i]-t1[i]); //结果进栈 t3 . 注意是相减后低位先进栈。。 } // for(i=0;i<t3.size();i++) // cout <<t3[i]<<" "; if(t3[0]==4&&t3[1]==7&&t3[2]==1&&t3[3]==6){ //低位开始减,所以是倒序的,满足条件,输出,退出 cout <<count<<endl; exit(0); } else{ //不满足条件 vi.assign(t3.begin(),t3.end()); //先把t3容器的值赋给vi ,才能循环处理。 t1.clear(); //一定要清空t1,t2,t3容器,不然会一直在原来的基础上进栈。 t2.clear(); t3.clear(); count++; //计数器加一。 } } return 0; }
算法提高 数字黑洞
时间限制:1.0s 内存限制:256.0MB
问题描述
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入格式
一个四位整数,输入保证四位数字不全相同
输出格式
一个整数,表示这个数字经过多少次变换能得到6174
样例输入
4312
样例输出
3
相关文章推荐
- 蓝桥杯 ADV-170算法提高 数字黑洞
- 蓝桥杯 算法提高VIP 数字黑洞(Java解题)
- 算法提高 ADV-170 数字黑洞
- 算法提高 数字黑洞
- 算法提高 数字黑洞
- 算法提高 数字黑洞
- 算法提高 数字黑洞
- 算法提高 数字黑洞
- 蓝桥杯算法提高----2n皇后
- 蓝桥杯 算法提高 身份证号码升级
- 蓝桥杯 ADV-110 算法提高 温度转换
- 蓝桥杯算法提高——拿糖果(数学+dp)
- 蓝桥杯 算法提高 队列操作(Java解题)
- 算法-蓝桥杯-算法提高 十进制数转八进制数 (JAVA)
- 蓝桥杯 算法提高 打水问题 逻辑策略 贪心
- 蓝桥杯 ADV-176 算法提高 陶陶摘苹果
- 蓝桥杯 算法提高 矩阵相乘
- 蓝桥杯ADV-157——算法提高 现代诗如蚯蚓
- 蓝桥杯练习: 算法提高 9-2 文本加密
- 算法-蓝桥杯-算法提高 排列数(JAVA)