您的位置:首页 > 其它

整数移位为原数的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....位依此类推。

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: