题解 P5727 【【深基5.例3】冰雹猜想】

· · 题解

这道题目较水,可我提交了5次才过。

ps:如果你第5个点错了,其他点都对了,那么请看下面

首先我们来看一看题目,得出了下列信息:

1.如果为奇数就*3+1

2.如果为偶数就/2

我们就有了重点部分:

while(n!=1)//while循环
{
    a[i]=n;//存入
    i++;//i一定要进行累加             if(n%2==0) n/=2;//开始模拟
    else n=3*n+1;
}

接着我们就可以写出程序了:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[102]={0},i=1;
    cin>>n;
    while(n!=1)
    {
        a[i]=n;
        i++;
        if(n%2==0) n/=2;
        else n=3*n+1;
    }
    a[i]=1;
    for(int j=i;j>=1;j--)
    {
        cout<<a[j]<<' ';
    }
    return 0;
}

一提交,啊!竟然80分(惨痛教训戳此)!

后来我求助了大佬,才发现原来是数组开小了(你一个入门题数据这么毒瘤干啥)

记住个数是可以 >100 的,因为有的数*了之后变大,从而数变多

奉上AC代码:

#include<bits/stdc++.h>//万能头
using namespace std;
int main()
{
    int n,a[1002]={0},i=1;//i是记个数用的
    cin>>n;
    while(n!=1)//重点
    {
        a[i]=n;
        i++;
        if(n%2==0) n/=2;
        else n=3*n+1;
    }
    a[i]=1;//开始准备输出
    for(int j=i;j>=1;j--)
    {
        cout<<a[j]<<' ';
    }
    return 0;//比赛一定要加
}

所以一定要认真审题啊!