题解 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;//比赛一定要加
}
所以一定要认真审题啊!