您的位置:首页 > 产品设计 > UI/UE

Ducci Sequence UVA 1594

2017-01-04 17:27 295 查看
本题用了两种解法:解法一是直接通过数组,当所有元素为0时,退出循环
解法二则是为了练习STL中容器的使用,利用set容器元素不重复的特点,当元素不同时向set中插入元素,(count()方法判断)有相同时 即为循环;

解法一:

#include<cstdio>
#include<cstdlib>
const int len=20;
int a[len];
int solve(int n){
    for(int i=0;i<n;i++){
        if(a[i])return 0;
    }
    return 1;
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        int temp=1000;
        int fg=1;
        while(temp--){
            int t=a[0];
            int i=0;
            for(;i<n-1;i++)
                a[i]=abs(a[i]-a[i+1]);
                a[i]=abs(t-a[i]);
            int flag=solve(n);
            if(flag){
                printf("ZERO\n");
                fg=0;
                break;
            }
        }
        if(fg)printf("LOOP\n");
    }
    return 0;
}

解法二:

#include<cstdio>
#include<set>
#include<cstdlib>
#include<vector>
using namespace std;
vector<int>vec;
set<vector<int> >set1;
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {int temp;
        scanf("%d",&temp);
        vec.push_back(temp);
        }
        set1.insert(vec);
        int t=1000;
        while(t--){
        int i;
        for(i=0;i<n;i++)
         if(vec[i]==0);
         else break;
         if(i==n){
             printf("ZERO\n");
             break;
         }

        int temp=vec[0];
        for(i=0;i<n-1;i++)
            vec[i]=abs(vec[i]-vec[i+1]);
        vec[i]=abs(temp-vec[i]);
            if(!set1.count(vec))set1.insert(vec);
              else {
                printf("LOOP\n");
                break;    }
        }
        vec.clear();
        set1.clear();                   //每一组数据结束都需要清空容器
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: