兩個白爛點:
(1) 1的次數為3不為1 -.-。
(2) 未必是L H的input形式,有可能是H L。
但output還是要用L H的形式。 =.=
有夠白爛。
像這種定義有問題或是input/output不明確的題目都是爛題目。
/* ACM 371 Ackermann Functions
* mythnc
* 2011/11/30 08:23:02
* run time: 0.128
*/
#include <stdio.h>
#define SWAP(X, Y, T) T = X, X = Y, Y = T
typedef struct max {
int index, value;
} Max;
Max cal(int, int);
int count(long long);
int main(void)
{
int i, j, tmp;
Max m;
while (scanf("%d %d", &i, &j) && i != 0) {
if (i > j)
SWAP(i, j, tmp);
m = cal(i, j);
printf("Between %d and %d, %d generates the longest sequence of %d values.\n",
i, j, m.index, m.value);
}
return 0;
}
/* cal: find the big cycle len, and return it */
Max cal(int small, int big)
{
int i, tmp;
Max m;
m.index = small;
m.value = count(small);
for (i = small + 1; i <= big && i > 0; i++) {
tmp = count(i);
if (m.value < tmp) {
m.index = i;
m.value = tmp;
}
}
return m;
}
/* count: count the numbers of value n to 1 */
int count(long long n)
{
int c;
if (n == 1)
return 3;
for (c = 0; n != 1; c++)
if (n % 2 == 0)
n >>= 1; /* n /= 2 */
else
n = n * 3 + 1;
return c;
}
沒有留言:
張貼留言