夜蚀天 发表于 2022-1-20 20:44:16

求助

给出一个正整数 n(n\le 100)n(n≤100),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。经过验证很大的数字(7\times10^{11}7×10
11
)都可以按照这样的方式比变成 1,所以被称为“冰雹猜想”。例如当 nn 是 20,变化的过程是 。

根据给定的数字,验证这个猜想,并从最后的 1 开始,倒序输出整个变化序列。
#include <stdio.h>
int main()
{
        int a,i=0;
        scanf("%d", &a);
        for(;a==1;i++)
        {
                if (a % 2 == 0)
                        a =a/2;
                else
                        a = a * 3 + 1;
        }
        for (; i >= 0; i--)
                printf("%d", a);
        return 0;
}
为什么只输出了20?

大马强 发表于 2022-1-20 21:02:17

#include <stdio.h>
int main()
{
      int a,i=0;
      scanf("%d", &a);
      for(;a!=1;i++) // 条件写错了
      {
                if (a % 2 == 0)
                        a =a/2;
                else
                        a = a * 3 + 1;
      }
      for (; i >= 0; i--)
                printf("%d ", a);
      return 0;
}

YSW9527 发表于 2022-1-20 22:56:52

你for循环里面的条件是a==1,显然写错了,你输入20,第一次执行肯定不等于1,所以for循环就没进去,当然就只有一个20了。
改为a!=1就可以了

傻眼貓咪 发表于 2022-1-21 09:39:04

本帖最后由 傻眼貓咪 于 2022-1-21 09:40 编辑

数组最多可以存放 100 个元素也是错的。
题目给定n <= 100,设 n = 27 试试

傻眼貓咪 发表于 2022-1-21 10:17:59

方法 1:#include <stdio.h>
#include <malloc.h>

struct Node{
        int val;
        struct Node *next;
};

int main(){
        struct Node *head = NULL, *tail;
        int n, m;
        scanf("%d", &n);
        m = n;
        do{
                n = n%2 ? n*3+1 : n/2;
                tail = head;
                head = (struct Node*)malloc(sizeof(struct Node));
                head->val = n;
                head->next = tail;
        }while(n != 1);
        while(head){
                printf("%d ", head->val);
                head = head->next;
        }
        printf("%d ", m);
        return 0;
}方法 2:#include <stdio.h>

void CollatzConjecture(int n){
        if(n == 1){
                printf("%d ", n);
                return;
        }
        CollatzConjecture(n%2 ? n*3+1 : n/2);
        printf("%d ", n);
}

int main(){
        int n;
        scanf("%d", &n);
        CollatzConjecture(n);
        return 0;
}输入/输出:27
1 2 4 8 16 5 10 20 40 80 160 53 106 35 70 23 46 92 184 61 122 244 488 976 325 650 1300 433 866 1732 577 1154 2308 4616 9232 3077 6154 2051 4102 1367 2734 911 1822 3644 7288 2429 4858 1619 3238 1079 2158 719 1438 479 958 319 638 1276 425 850 283 566 1132 377 754 251 502 167 334 668 1336 445 890 1780 593 1186 395 790 263 526 175 350 700 233 466 155 310 103 206 412 137 274 91 182 364 121 242 484 161 322 107 214 71 142 47 94 31 62 124 41 82 27
页: [1]
查看完整版本: 求助