C/C++の宿題片付けます 127代目
■ このスレッドは過去ログ倉庫に格納されています
0323デフォルトの名無しさん
2009/06/14(日) 01:25:14#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int arr[10]={1,1,2*2,3*3*3,4*4*4*4,5*5*5*5*5,6*6*6*6*6*6,7*7*7*7*7*7*7,8*8*8*8*8*8*8*8,9*9*9*9*9*9*9*9*9};
int cmp(const int *a, const int *b){
return (*a>*b)?-1:(*a<*b);
}
int sum_num_equal(unsigned long sum, int num[]){
int i, sumnum[]={0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
for(i=0;i<11 && sum;i++,sum/=10) sumnum[i]=sum%10;
qsort(sumnum, 11, sizeof(int), cmp);
return memcmp(num, sumnum, sizeof(sumnum))==0;
}
void solve(int *num, int depth){
int i;
unsigned long sum=0;
if(depth>=11){
for(i=0;i<11 && num[i]>=0;i++) sum+=arr[num[i]];
if(sum_num_equal(sum, num)) printf("%lu\n", sum);
return;
}
for(i=num[depth-1];i>=-1;i--){
num[depth]=i;
solve(num, depth+1);
}
}
int main(void){
int num[12]={9};
solve(num+1, 0);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています