#include
using namespace std;
int main()
{
int i,n,k=0;
int a[100],t[100];
cout<<"please input numbers:";
for(i=0;i<100;i++){
cin>>a[i];
k++;
if(a[i]==0)
break;
}
for(i=0,t[i]=0;i1){
if(a[i]%2==0)
a[i]=a[i]/2;
else
a[i]=(a[i]*3+1)/2;
t[i]++;
}cout<0;
}
请问为什么除了第一个值是正常的之外,之后的第三个,第五个和其他奇数个值都是乱码?是不能用数组吗?
因为你第7行没初始化,第15行只对i=0,t[i]=t[0]=0初始化了,访问并输出无意义的内容 所以乱码。
在第7行的两个数组后都加上 ={0} 即可。
这个问题出现的原因可能是由于在计算的过程中,当a[i]是偶数时,可以正常执行a[i]/2,但是当a[i]是奇数时,执行(a[i]*3+1)/2的结果可能是带有小数的浮点数,但是数组t只能存储整型数值,因此导致了乱码的问题。
要解决这个问题,可以将数组t的元素类型改为浮点型,即将int t[100]改为float t[100]。同时,在计算(a[i]*3+1)/2时,可以使用强制类型转换,将结果转换为整数类型,即int((a[i]*3+1)/2)。
#include<iostream>
using namespace std;
int main()
{
int i,n,k=0;
int a[100];
float t[100];
cout<<"please input numbers:";
for(i=0;i<100;i++){
cin>>a[i];
k++;
if(a[i]==0)
break;
}
for(i=0,t[i]=0;i<k;i++){
while(a[i]!=1){
if(a[i]%2==0)
a[i]=a[i]/2;
else
a[i]=int((a[i]*3+1)/2);
t[i]++;
}
cout<<t[i]<<endl;
}
return 0;
}