1005. 继续(3n+1)猜想 (25)

来源:互联网 发布:视频噪音消除软件 编辑:程序博客网 时间:2024/05/01 06:36

分析:这个题目的思路是把每个数字计算过程中的数字记录下来,再次遍历的时候把没有标记的数据保存下来并排序输出

注意:由于计算过程中的数字可能会超过100,所以只保存100以内的数据。

 #include<stdio.h>    #include <algorithm>    using namespace std;    bool cmp(int  a, int b)    {        return a > b;    }    int main(){        int n;        int num[100];        int result [101]={0};        int sortarray [100];        scanf("%d",&n);        int i;        for( i =0;i<n ;i++)        {            scanf("%d",&num[i]);        }        for(i=0;i<n;i++)        {            int tmp = num[i];            while(tmp!=1){                if(tmp%2==0){                    tmp = tmp/2;                    if(tmp<=100)                    result[tmp]=1;                }                else{                    tmp = (tmp*3+1)/2;                    if(tmp<=100)                    result[tmp]=1;                }            }        }        int counter = 0;        for( i =0;i<n;i++){          if(result[num[i]]!=1){            sortarray[counter] = num[i];            counter++;          }        }        sort(sortarray,sortarray+counter,cmp);        printf("%d",sortarray[0]);        for(i =1;i<counter;i++)        printf(" %d",sortarray[i]);    }


0 0