题目:
题目内容:
奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 如n = 11,得序列:11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1。(步骤中最大数是52)
题目输入正整数n,求这个n归一过程中的最大值
输入格式:
一个正整数
输出格式:
一个正整数
输入样例:
11
输出样例:
52
时间限制:500ms内存限制:32000kb
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int count = 0 ;
int num , i , j;
int max = 0, min = 1, temp ;
int buffer[1000] = {0} , value = 0;
scanf("%d", &num);
while(1)
{ //if-else是奇偶归一的核心算法
if(num % 2 == 1){
num*=3 ;
num+=1 ;
}
else
{
num >>= 1 ;
}
value = num ;
buffer[count] = value ;
count ++ ;
if(num == 1)
{ //这里是冒泡排序,目的是为了求出排序完后最大的那个数
for(j=1;j<=count-1;j++)
{ /*n个数处理n-1趟*/
for(i=0;i<=count-1-j;i++)
{ /*每趟比前一趟少比较一次*/
if(buffer[i]>buffer[i+1])
{
temp=buffer[i];
buffer[i]=buffer[i+1];
buffer[i+1]=temp;
}
}
}
printf("%d",buffer[count-1]);//冒泡排序最大的那个数一定是最后一个,假设count=14,那么最大的那个坐标应当是count-1,数组从0开始算
break ;
}
}
return 0 ;
}