这段时间,怿飞的博客上有一篇用 JavaScript 解数学题,代码很简练优雅。于是突然想用C写写看,因为很久没写,就权当是练习也挺不错啊:)
题目是这样的:一个六位数,分别用2,3,4,5,6乘它,得到的五个新数仍是由原数中的六个数字组成,只是位置不同,则此六位数是多少?
#include <stdio.h>
#include <string.h>
#define DIGIT 6
#define MULTI 5
void swap( char *a, char *b ){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void bubbleSort( char arr[] )
{
int i,j;
for(i = 0; i < DIGIT; i++){
for(j = 0; j < DIGIT-1; j++){
if ( arr[j] > arr[j+1] ){
swap( arr+j, arr+j+1 );
}
}
}
}
int main(){
int num, numCopy, i, j, ind;
int mul[MULTI] = {2,3,4,5,6};
char indStr[DIGIT+1];
char StrToCmp[DIGIT+1];
for( num = 1000000/6; num >= 100000; num-- ){
numCopy = num;
for( i = 0; i < DIGIT; i++ ){
StrToCmp[i] = numCopy%10+48;
numCopy /= 10;
}
StrToCmp[DIGIT] = '\0';
bubbleSort( StrToCmp );
for( i = 0; i < MULTI; i++ ){
ind = num * mul[i];
for( j = 0; j < DIGIT; j++){
indStr[j] = ind%10 + 48;
ind /= 10;
}
indStr[DIGIT] = '\0';
bubbleSort( indStr );
if( strcmp( StrToCmp, indStr )){
j = 0;
break;
}
}
if(j){
printf( "This number is %d\n", num );
}
}
getchar();
return 0;
}
无奈水平不高,用C写费了不少事。主要是排序(总觉得这里用个qsort会很别扭)以及转换。中间的转换步骤因为又有段时间不做题的关系,有点生疏。不过最后还是捣鼓出来了,尽管写的比较简陋~。
答案是:142857。
评论加载中...
由Disqus提供评论支持,如果评论长时间未加载,请飞跃长城。