网址如下:
Ducci Sequence - UVA 1594 - Virtual Judge (vjudge.net)
上乡村振兴概论,奖励自己一题
乐
一道set容器题,其中变成0的判断是利用了数组的每个数的总和(毕竟每个数都大于或等于0)
数组在原来的基础上,在末尾增加一个数,这个数的值一直等于第一位,目的是简化得到下一位的计算
代码如下:
#include<vector>
#include<set>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int getNext(vector<int> &n_tmp);int main(void)
{int n;scanf("%d", &n);for(int i = 0; i < n; i++){int m, tmp, sum = 0;vector<int> n_tmp;scanf("%d", &m);for(int j = 0; j < m; j++){scanf("%d", &tmp); n_tmp.push_back(tmp); sum += tmp;}if(!sum){printf("ZERO\n"); continue;}n_tmp.push_back(n_tmp[0]);//输入完成开始判断set<vector<int>> v_set;v_set.insert(n_tmp);for(int steps = 0; steps < 1000; steps++){sum = getNext(n_tmp);if(!sum){printf("ZERO\n"); break;}if(v_set.count(n_tmp)){printf("LOOP\n"); break;}v_set.insert(n_tmp);}}return 0;
}
int getNext(vector<int> &n_tmp)
{int sum = 0;for(int i = 0; i < n_tmp.size() - 1; i++){n_tmp[i] = abs(n_tmp[i] - n_tmp[i + 1]); sum += n_tmp[i];}n_tmp[n_tmp.size() - 1] = n_tmp[0];return sum;
}
set容器重拳出击