标签:
题目:
题目内容: 奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘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 ; }
标签:
原文地址:http://blog.csdn.net/morixinguan/article/details/52103700