C/C++の宿題を片付けます 114代目
■ このスレッドは過去ログ倉庫に格納されています
0435デフォルトの名無しさん
2008/07/28(月) 10:31:26#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swap(char *a, char *b){char c; c=*a;*a=*b;*b=c;}
int cmp(const signed char *a, const signed char *b){return *a-*b;}
void hoge(const char *base, char *work, char *flag, int index){
int i, prev=-1;
if(index==12){
int a=0, b=0, c, j;
char tmp[6+1], tmp2[10+1];
for(i=0;i<6;i++) a=(a*10)+work[i]-'0';
for(;i<12;i++) b=(b*10)+work[i]-'0';
if((c=1234567-a-b)<b) return;
for(i=j=0;i<18;i++) if(!flag[i]) tmp[j++]=base[i]; tmp[j]='\0';
sprintf(tmp2, "%d", c); qsort(tmp2, 6, 1, cmp);
if(strcmp(tmp2, tmp)==0) printf("%d %d %d\n", a, b, c);
return;
}else if(index>6) if(strncmp(&work[0], &work[6], index-6)>0) return;
for(i=0;i<18;i++){
if(flag[i] || base[i]==prev) continue;
prev=work[index]=base[i];
flag[i]=1;
hoge(base, work, flag, index+1);
flag[i]=0;
}
}
int main(void){
char base[]="111333555777799999", work[18+1], flag[18]={0};
hoge(base, work, flag, 0);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています