整数移位为原数的3倍+2
2016-03-24 09:57
211 查看
题:三位数的整数,将首位移至末位形成的数是原数的3倍加2,求原数。
三位十进制整数的表示(首位为y,后续为x):100y+x(0<=x<=99),转换后的三位数:10x+y,于是得到10x+y=3(100y+x)+2,化简:7x-2=299y,其中:1<=y<=9。计算机穷举:y=1或8,由x的约束条件,取y=1,则x=43,原数为143,移位后431.
传统的代数解法主要在于十进制整数的表示方法。
另一种,参照数组移位的方法直接穷举,将程序进行优化:由于三位数的限制,对首位优化:1<=y<=3。第二位优化,由于是原数3倍+2,而y>=1,所以第二位必定>=3。约束后的情形:
1 3 x ...
2 3 x...
3 3 x...
可能还可以进一步优化,暂时放在这。这段代码穷举三位数范围的解,4,5,6....位依此类推。
三位十进制整数的表示(首位为y,后续为x):100y+x(0<=x<=99),转换后的三位数:10x+y,于是得到10x+y=3(100y+x)+2,化简:7x-2=299y,其中:1<=y<=9。计算机穷举:y=1或8,由x的约束条件,取y=1,则x=43,原数为143,移位后431.
传统的代数解法主要在于十进制整数的表示方法。
另一种,参照数组移位的方法直接穷举,将程序进行优化:由于三位数的限制,对首位优化:1<=y<=3。第二位优化,由于是原数3倍+2,而y>=1,所以第二位必定>=3。约束后的情形:
1 3 x ...
2 3 x...
3 3 x...
可能还可以进一步优化,暂时放在这。这段代码穷举三位数范围的解,4,5,6....位依此类推。
#include <iostream> using namespace std; int main() { int a[3]; for(int i=1;i<=3;i++)/*百位*/ { a[0]=i; for(int j=3;j<=9;j++)/*十位*/ { a[1]=j; for(int k=0;k<=9;k++)/*个位*/ { a[2]=k; if(((a[0]*100+a[1]*10+a[2])*3+2)==(100*a[1]+10*a[2]+a[0])) { for(int v=0;v<3;v++) cout<<a[v]<<" "; } } } } return 0; }
相关文章推荐
- Oracle--数据量增长过快策略
- App架构经验总结
- WireShark帧格式解析
- 几种分布式消息系统比较(old)
- F
- OCX中使用钩子HOOK消息
- IOS开发之很简单的下拉刷新,包你满意
- 最全的常用正则表达式大全
- Android性能优化:SparseArray
- NSTimer的使用方法
- oracle 复制一个表数据 到另一个表中,select into与insert into
- 数据结构之栈和队列
- 使用Service和BroadcastReceiver实时监听网络状态
- 《Linux内核设计与实现》第五章学习笔记
- MongoDB中的分组
- 调用 webapi的put和delete 报"Method Not Allowed" 405 错误。
- 动态半透膜背景的热气球漂浮登陆界面 很赞
- 你还用PPT做演示文稿吗?
- jquery.lazyload.js图片延迟加载
- Debian软件包重编译方法