继xxx定律

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41648259/article/details/88113946

题目描述

    当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。如果其中有多个关键数的话按照其输入顺序的逆序输出。

输入描述:

    输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中: 1<=n<=500, 1<a[i]<=1000

输出描述:

    请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。

示例1

输入

复制

3
3 8 4
5
3 8 4 7 15
5
3 8 4 15 7
0

输出

复制

3
15 7 3
7 15 3

#include<iostream>
#define MAXSIZE 100
using namespace std;
int buf[MAXSIZE]={0},n;
void isOver(int a){
    int i;
    for(i=0;i<n;i++)
        if(a==buf[i]){
            buf[i]=0;
        }
        
}
int main(){
    int i;
    while(cin>>n){
        if(n==0) break;
        for(i=0;i<n;i++){
            cin>>buf[i];
        }
        for(i=0;i<n;i++){
            int tmp=buf[i];
            while(tmp!=1&&tmp!=0){
                if(tmp%2==0){
                    tmp=tmp/2;
                }else{
                    tmp=(tmp*3+1)/2;
                }
                isOver(tmp);
            }
        }
        for(int k=n-1;k>=0;k--)
            if(buf[k]!=0) cout<<buf[k]<<" ";
        cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41648259/article/details/88113946
xxx
今日推荐