~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题:三位数的整数,将首位移至末位形成的数是原数的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;
}
posted on 2016-03-24 09:57  LuoTian  阅读(307)  评论(0编辑  收藏  举报