C言語です。 この問題の答えと簡単な解説的なのを頂けないでしょうか? 解説が難しかったら答えだけでも構いません。

ベストアンサー

1

1人がナイス!しています

ThanksImg質問者からのお礼コメント

ありがとうございます。

お礼日時:6/14 14:51

その他の回答(2件)

1

#include <stdio.h> //Compiler version gcc 6.3.0 enum direction {G = 1,L = -1}; void itoarray(int,int[]); int arraytoi(int[]); void sort(int[],enum direction); int main() { int n,greater,less,prev; int num[4]; while (1) { printf("4桁の数字を入力してください:"); scanf("%d",&n); itoarray(n,num); if (4 * num[0] == num[0] + num[1] + num[2] + num[3]) { printf("すべて同じ数字は受け付けません\n"); } else { break; } } do { prev = n; itoarray(n,num); sort(num,G); greater = arraytoi(num); sort(num,L); less = arraytoi(num); n = greater - less; printf("%d - %d = %d\n",greater,less,n); } while (n != prev); return 0; } void itoarray(int n,int num[4]) { int i; for (i = 3;i >= 0;i--,n /= 10) { num[i] = n % 10; } } int arraytoi(int num[4]) { int n,i; for (i = n = 0;i < 4;i++) { n = 10 * n + num[i]; } return n; } void sort(int num[4],enum direction d) { int i,j,t; for (i = 0;i < 3;i++) { for (j = i + 1;j < 4;j++) { if (num[i] * d < num[j] * d) { t = num[i]; num[i] = num[j]; num[j] =t; } } } }

1人がナイス!しています

0

(kai********さん) これでいいのかな? 参考: #include <stdio.h> void swap(char *a, char *b) { char t; t=*a; *a=*b; *b=t; } //mode=0 up mode<>0 dn void bsort(char *s, int n, int mode) { int i, j; for(i=0; i<(n-1); i++) { for(j=(i+1); j<n; j++) { if(mode==0) { if(s[i]>s[j]) swap(&s[i], &s[j]); } else { if(s[i]<s[j]) swap(&s[i], &s[j]); } } } } int ck(int x) { int cnt=0, a; a=x%10; while(x>0) { if((x%10)==a)cnt++; x /= 10; } return cnt; } int conv(int x, int m) { char s[10]; int y=0, i=0; sprintf(s, "%d", x); while(s[i++]); i -=2; bsort(s, i+1, m); while(i>=0) { y= y*10 + (s[i]-'0'); i--; } return y; } int main(void) { int a, b, c=0, s=9999; printf("Input nuber(4digit)>"); scanf("%d", &a); if(a<1000 || a>9999) { puts("01: Input error!!"); return 1; } if(ck(a)==4) { puts("02: Input error!!"); return 1; } c=a; while(c != s) { s=c; a=c; a=conv(a, 0); b=conv(a, 1); c=a-b; printf("%4d - %4d = %4d\n", a, b, c); } return 0; } ~~~~~~~~~~~~~~~~~ Input nuber(4digit)>1234 4321 - 1234 = 3087 8730 - 378 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ~~~~~~~~~~~~~~~~~ Input nuber(4digit)>5551 5551 - 1555 = 3996 9963 - 3699 = 6264 6642 - 2466 = 4176 7641 - 1467 = 6174 7641 - 1467 = 6174 ~~~~~~~~~~~~~~~~~ Input nuber(4digit)>123 01: Input error!! ~~~~~~~~~~~~~~~~~ Input nuber(4digit)>2222 02: Input error!!