今天尝试着注册了uva的帐号来试试刷题。记录一下AC的代码
#include "stdio.h"
//检查数字的大小来保证从小到大数数
void check(int* i, int* j){
if(*i > *j){
int temp = *i;
*i = *j;
*j = temp;
}
}
int arr[1000001];
int main(){
int i,j;//输入的一堆数字
int cur;//保存当前进行的数字
while(scanf("%d%d",&i,&j) != EOF){
int max = 1;
printf("%d %d ",i ,j);//先输出一对数字再进行检查数字
check(&i, &j);
for(cur = i; cur<=j; cur++){
//如果已经计算过了就直接赋值来减少运算时间
if(arr[cur] != 0){
if(max < arr[cur]){
max = arr[cur];
}
continue;
}
//基本算法
int count = 1;
int temp = cur;
while(temp != 1){
if(temp%2 != 0){
temp = 3 * temp + 1;
}else{
temp = temp / 2;
}
count++;
}
arr[cur] = count;
if(count>max){
max = count;
}
}
printf("%d\n",max);
}
}