博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA100 The 3n + 1 problem
阅读量:2440 次
发布时间:2019-05-10

本文共 4523 字,大约阅读时间需要 15 分钟。

  

Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs.

Consider the following algorithm:

1. 		 input n 		2. 		 print n 		3. 		 if n = 1 then STOP 		4. 		 		 if n is odd then   		5. 		 		 else   		6. 		 GOTO 2

Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers n such that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.)

Given an input n, it is possible to determine the number of numbers printed (including the 1). For a given nthis is called the cycle-length of n. In the example above, the cycle length of 22 is 16.

For any two numbers i and j you are to determine the maximum cycle length over all numbers between i and j.

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

You should process all pairs of integers and for each pair determine the maximum cycle length over all integers between and including i and j.

You can assume that no operation overflows a 32-bit integer.

For each pair of input integers i and j you should output ij, and the maximum cycle length for integers between and including i and j. These three numbers should be separated by at least one space with all three numbers on one line and with one line of output for each line of input. The integers i and j must appear in the output in the same order in which they appeared in the input and should be followed by the maximum cycle length (on the same line).

1 10100 200201 210900 1000

1 10 20100 200 125201 210 89900 1000 174
 
注意:(1)i和j的大小关系
(2)3*n+1的值可能会超过int
参考代码:
#include 
typedef long long ll;int main(){ ll i,j; while (~scanf("%lld%lld",&i,&j)){ ll ii=i,jj=j; int max=0; if (i>j){ ll temp=j; j=i; i=temp; } for (ll y=i;y<=j;y++){ ll x=y; int count=1; // printf("%lld ",x); while (x!=1){ count++; if (x%2!=0) x=3*x+1; else x=x/2; // printf("%lld ",x); } // printf("\n"); if (max

  

Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs.

Consider the following algorithm:

1. 		 input n 		2. 		 print n 		3. 		 if n = 1 then STOP 		4. 		 		 if n is odd then   		5. 		 		 else   		6. 		 GOTO 2

Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers n such that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.)

Given an input n, it is possible to determine the number of numbers printed (including the 1). For a given nthis is called the cycle-length of n. In the example above, the cycle length of 22 is 16.

For any two numbers i and j you are to determine the maximum cycle length over all numbers between i and j.

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

You should process all pairs of integers and for each pair determine the maximum cycle length over all integers between and including i and j.

You can assume that no operation overflows a 32-bit integer.

For each pair of input integers i and j you should output ij, and the maximum cycle length for integers between and including i and j. These three numbers should be separated by at least one space with all three numbers on one line and with one line of output for each line of input. The integers i and j must appear in the output in the same order in which they appeared in the input and should be followed by the maximum cycle length (on the same line).

1 10100 200201 210900 1000

1 10 20100 200 125201 210 89900 1000 174
 
注意:(1)i和j的大小关系
(2)3*n+1的值可能会超过int
参考代码:

转载地址:http://ubbqb.baihongyu.com/

你可能感兴趣的文章
在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择
查看>>
CLR的垃圾回收(GC)机制(1)
查看>>
.NET架构概述
查看>>
架构设计之面向服务(SOA)
查看>>
Xamarin--简介
查看>>
Android Activity 简介
查看>>
内核术语--服务,函数,Routine,进程,线程,作业,Fiber,虚拟内存
查看>>
内核术语--内核模式,用户模式,内核对象,内核调试,安全,注册表,Unicode,驱动
查看>>
Windows系统架构
查看>>
Windows 8.1 Preview的新功能和新API
查看>>
Windows的关键系统组件
查看>>
Windows内核中的组件
查看>>
Windows进程数据结构及创建流程
查看>>
Win32平台下的线程同步
查看>>
选择排序
查看>>
一次代码Review的总结
查看>>
插入排序
查看>>
冒泡排序
查看>>
归并排序
查看>>
快速排序
查看>>