将1,2,3,4,5,6,7,8,9九个数字分成N=XX(XXXX/XXX)的形式
#include <stdio.h>
int main() { int x; int j; int k; int i; int l; int m; int n; int p; int q; int o; int a [ 9 ]; for( x = 12; x<99; x++) //遍历x for( j = 1234; j<9877; j++) //遍历j for( k = 123; k < 988; k++) //遍历k { m = j; n = k; a [ 7 ] = x/10; //将x分解成构成的数字 a [ 8 ] = x; for( i = 0,l = 1000; i<4; i++) //将j分解成构成的四个数字 { a [ i ] = m/l; m %= l; l /= 10; } for( i = 4,l = 100; i<7; i++) //将k分解成构成的三个数字 { a [ i ] = n/l; n %= l; l /= 10; } if( a [ 0 ]*a [ 1 ]*a [ 2 ]*a [ 3 ]*a [ 4 ]*a [ 5 ]*a [ 6 ]*a [ 7 ]*a [ 8 ] == 362880) //构成x,j,k的九个数字是否等于9! { for( i = 0; i<8; i++) //判断九个数字是否相同,全部不同则跳出循环 { for( p = i+1; p<9; p++) { q = a [ i ]; o = a [ p ]; if(q == o) break; } if( p != 9) break; } if( j%k == 0 && i == 8) 当j能被k整除且九个不同数字都能输出时,输出N=XX(XXXX/XXX) printf("N = %d(%d/%d)\n",x,j,k); } }}
此题需要当心判断条件,首先要满足的就是九个数是1,2,3,。。。。,9构成,这里利用他们的乘积满足九的阶乘且九个数字各个不同。
if( a [ 0 ]*a [ 1 ]*a [ 2 ]*a [ 3 ]*a [ 4 ]*a [ 5 ]*a [ 6 ]*a [ 7 ]*a [ 8 ] == 362880) //构成x,j,k的九个数字是否等于9! { for( i = 0; i<8; i++) //判断九个数字是否相同,全部不同则跳出循环 { for( p = i+1; p<9; p++) { q = a [ i ]; o = a [ p ]; if(q == o) break; } if( p != 9) break;
我这里利用了两个for循环中再加入if语句判断,当前面的数不同于后面所有的数,最后当满足排列后再跳出循环。
if( j%k == 0 && i == 8)
最后用j能被k整除带入其中,i == 8则是验证之前循环是否完成。