题目说明
一个数组A中存在N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(>=0)个位置,即将A中的数据由(A0A1…AN-1)变换为(AN-M…AN-1A0A1…AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式
每个测试输入包含 1 个测试用例,即给出正整数 n 的值。
输出格式
输出从 n 计算到 1 需要的步数。
样例
输入样例:
3
输出样例:
5
代码
#include <stdio.h>
int main(){
int num;
int i = 0;
//printf("害死人不偿命的(3n+1)猜想\n");
//printf("请输入一个自然数:");
scanf("%d",&num);
while(num != 1){
i++;
if(num % 2 == 0){
num = num / 2;
}else{
num = 3 * num + 1;
num = num / 2;
}
}
printf("%d\n",i);
return 0;
}