问题描述:
奇人小张从来不记自家楼下开门的密码,每次都叫小区保安帮忙解锁,某日,保安不干了,说到:“密码改了,还是四位,恰为原密码颠倒过来,且恰为原密码的4倍。‘就凭这么一点信息,能算出唯一确定的新密码吗?
分析:
- 假设原密码为ABCD,颠倒后即为DBCA且DBCA=4*ABCD。
- 1000《ABCD《10000。且1000=<DBCA=4*ABCD<=10000
- 所以A只能是1或2,又A为1时,DBCA是奇数,不可能满足4倍的关系。所以A=2,
- 则D=8或9,D=9不满足4倍关系,则D=8
- 则只需要求出B和C两个值就可以。
算法实现的关键:
- 要将四位数ABCD拆开成单个的数字A,B,C,D再组装成新的四位数DBCA。
SeperateNumber(long N)
{
int n,s[30],i = 0; //n = ABCD;
do{s[i++] = N%10;N=N/10}while(N);
return (n = s[0]*1000+s[1]*100+s[2]*10+s[3])
}
- 满足等式关系4*ABCD=DBCA
算法1:穷举法:由数N的范围为100