1049 - 验证角谷猜想
时间限制 : 1 秒
内存限制 : 32 MB
数论中有许多猜想尚未解决,其中有一个被称为“角谷猜想”的问题,该问题在五、六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何一个大于一的自然数,如果是奇数,则乘以三再加一;如果是偶数,则除以二;得出的结果继续按照前面的规则进行运算,最后必定得到一。现在请你编写一个程序验证他的正确性。
题目输入
题目包含多组测试数据,第一行为测试数据组数N,接着是N行的正整数。
题目输出
输出验证“角谷猜想”过程中的奇数,最后得到的1不用输出;每个测试题输出一行;每行中只有两个输出之间才能有一个空格;如果没有这样的输出,则输出:No number can be output !。
输入/输出样例
输入格式
4 5 9 16 11
输出格式
5 9 7 11 17 13 5 No number can be output ! 11 17 13 5
C语言解答
#include<stdio.h> int main() { int t,n,k,a[200],i; scanf("%d",&t); while(t--) { scanf("%d",&n); k=0; while(n!=1) { if(n%2) { a[k++]=n; n=n*3+1; } else n/=2; } if(k) for(i=0;i<k;i++) printf(i==k-1?"%d\n":"%d ",a[i]); else printf("No number can be output !\n"); } return 0; }
C++解答
#include<stdio.h> int main() { int t,n,k,a[200],i; scanf("%d",&t); while(t--) { scanf("%d",&n); k=0; while(n!=1) { if(n%2) { a[k++]=n; n=n*3+1; } else n/=2; } if(k) for(i=0;i<k;i++) printf(i==k-1?"%d\n":"%d ",a[i]); else printf("No number can be output !\n"); } return 0; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] agrs) { Scanner input=new Scanner(System.in); int v=input.nextInt(); for(int i=1;i<=v;i++) { int s=0;String m="a"; int a=input.nextInt(); while(a!=1) { if(a%2!=0) { String t=String.valueOf(a); m=m.concat(t); m=m.concat(" "); s++; a=a*3+1; } else a=a/2; } if(s!=0) System.out.println(m.substring(1,m.length()-1)); else System.out.println("No number can be output !"); } } }
Python解答
# coding=utf-8 n=int(input()) nli=[] for i in range(n): nli.append(int(input())) for j in range(len(nli)): t=[] temp=nli[j] while temp!=1: if temp%2==0: temp=temp/2 else: t.append(int(temp)) temp=temp*3+1 if len(t)==0: print('No number can be output !') else: te='' for k in range(len(t)-1): te=te+str(t[k])+' ' te=te+str(t[len(t)-1]) print(te)