继续3n+1猜想

题目描述:

解题思路:

将一串数组放入a[]中,做循环:

1. 如果a[i]非零,对a[i]的中间值放入一个temp[]数组

  循环temp[]

    循环a[]

      如果有temp[i]==a[j]  a[j]=0;

得到的数组a[]中非零元素即为要求值,紧缩数组,排序输出即可

代码如下:

 1 #include<stdio.h>
 2 int n;
 3 int temp[111];//0-100内的数,中间结果不会超过77+34次
 4 int main()
 5 {
 6     scanf("%d",&n);
 7     int a[100];
 8     for(int i=0;i<n;i++) scanf("%d",&a[i]);
 9     
10     for(i=0;i<n;i++)   //将能被覆盖的设置为0
11     {
12         if(a[i]!=0)
13         {
14             int j=a[i],k=0;
15             while(j!=1)
16             {
17                 if(j%2!=0) j=(3*j+1)/2;
18                 else j/=2;
19                 if(j!=1)
20                 {
21                     temp[k]=j;
22                     k++;
23                 }
24             }
25             for(int m=0;m<n;m++)
26             {
27                 if(a[m]!=0)
28                 {
29                     for(int j=0;j<k;j++)
30                     {
31                         if(temp[j]==a[m]) 
32                         {
33                             a[m]=0;
34                             break;
35                         }
36                     }
37                 }
38             }
39         }
40     }
41 
42     int h=0,jj=0;
43     for(i=0;i<n;i++)       //向前归总
44     {
45         
46         if(a[i]!=0) 
47         {
48             h++;
49             a[i-jj]=a[i];
50         }
51         else jj++;
52     }
53    
54     for(i=0;i<h-1;i++)  //排序
55     {
56         int max=i,temp;
57         for(int j=i+1;j<h;j++)
58         {
59             if(a[max]<a[j]) max=j;
60         }
61         if(max!=i)
62         {
63             temp=a[max];
64             a[max]=a[i];
65             a[i]=temp;
66         }
67     }
68     printf("%d",a[0]);
69     for(i=1;i<h;i++) printf(" %d",a[i]);
70     printf("\n");
71     return 0;
72 }

运行结果:

猜你喜欢

转载自www.cnblogs.com/bboykaku/p/12590141.html