我已经解决了UVa 100 - The 3n + 1 problem,我想出了这个解决方案
//UVa 100 - The 3n + 1 problem
//1.3 1st problem
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <math.h>
#include <string>
#include <map>
#include <algorithm>
#define SIZE 1234567
using namespace std;
int main(void) {
int i = 1, j = 1000000;
int arr[SIZE] = {0};
unsigned int n = 0, temp_i = i, temp_j = j, res = 0, max = 0;
while(temp_i <= temp_j) {
n = temp_i;
res = 1;
while( n != 1 ) {
if(n % 2 == 0) {
n = n >> 1;
res += 1;
}
else {
n = 3 * n + 1;
n = n >> 1;
res += 2;
}
}
arr[temp_i] = res;
++temp_i;
}
while( scanf("%d %d",&i,&j) != EOF ) {
temp_j = j;
temp_i = i;
if( i > j )
i = ( i + j ) - ( j = i );
max = 0;
for(; i <= j; ++i)
if(max < arr[i])
max = arr[i];
printf("%u %u %u\n",temp_i,temp_j,max);
}
return 0;
}
好的,这里一切都很好,但是当我使用
时unsigned long int
或
unsigned long long int
取代
unsigned int
我收到错误或错误的结果。 这是一个例子
运行此代码并赋予值
626331 626331
现在在上面的程序中你会得到(哪个是正确的)
374
作为答案,当您使用unsigned long int或unsigned long long int更改unsigned int时,您将获得(这是错误的)
509
作为答案,我完全困惑为什么我得到这个值:(
PS:我对格式说明符很小心,并尝试使用cin / cout代替scanf / printf,但没有运气。