|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是要求输入一个四位数,让里面数字组成最大值和最小值相减,一直循环下去直到结果重复为止。输入1001,最终结果为6174;
这里不知道是不是我的递归方法用得不对,大佬们帮我看下。
- #include<stdio.h>
- int num[5];
- int result(int m) {
- int e, f; // 存放余数
- int max, min;
- num[0] = m / 1000; // 千位
- e = m % 1000;
- num[1] = e / 100; // 百位
- f = e % 100;
- num[2] = f / 10; // 十位
- num[3] = f % 10; // 个位
- int i, j;
- // 四位数最大值
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4 - i - 1; j++) {
- if (num[j] < num[j + 1]) {
- int temp = num[j];
- num[j] = num[j + 1];
- num[j + 1] = temp;
- }
- }
- }
- max = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3];
- // 四位数最小值
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4 - i - 1; j++) {
- if (num[j] > num[j + 1]) {
- int temp = num[j];
- num[j] = num[j + 1];
- num[j + 1] = temp;
- }
- }
- }
- min = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3];
- int cha1 = max - min; // 求差
- int cha2 = 0;
- if (cha1 != cha2) { // 不相同递归
- cha2 = cha1;
- return result(cha1);
- }
- else {
- return cha1;
- }
- }
- int main() {
- int m;
- scanf("%d", &m);
- printf("%d", result(m));
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2021-10-27 15:51 编辑
第42行有错误
- if (cha1 != cha2) { // 不相同递归
复制代码
改为
- if (cha1 != m) { // 不相同递归
复制代码
试试看。
下面是我写的代码版本,仅供楼主参考
- #include <stdio.h>
- int foo(int n)
- {
- int d[4] = {0} , i , j , k , r = 0 , max , min ;
- if(n > 999 && n < 10000) {
- for(k = n , i = 4 ; i ; k /= 10 , i --) d[i - 1] = k % 10 ;
- for(i = 0 ; i < 3 ; i ++) {
- for(j = i + 1 ; j && d[j] < d[j - 1]; j --) {
- k = d[j - 1] ;
- d[j - 1] = d[j] ;
- d[j] = k ;
- }
- }
- max = d[3] * 1000 + d[2] * 100 + d[1] * 10 + d[0] ;
- min = d[0] * 1000 + d[1] * 100 + d[2] * 10 + d[3] ;
- if(max - min != n) r = foo(max - min) ;
- else r = max - min ;
- }
- return r ;
- }
- int main(void)
- {
- int n ;
- scanf("%d" , & n) ;
- printf("%d\n" , foo(n)) ;
- }
复制代码
编译、运行实况:
- D:\0002.Exercise\C>g++ -o x x.c
- D:\0002.Exercise\C>x
- 1001
- 6174
- D:\0002.Exercise\C>
复制代码
|
|