Uva 1594 - Ducci Sequence

一.题目

题目链接:Uva1594

二.思路

用vector保存每个元组里面的元素,判断一个元组是否归0的方法:用一个flag计算当前状态下的元组的0的个数,如果0的个数等于元组里元素的个数,则说明当前元组是ZERO,跳出循环,如果直到1000次还没跳出循环,则说明是LOOP型的。详细的请看代码注释。

三.源代码

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
  int n = 0, n2 = 0, m = 0, temp = 0, flag = 0, k = 0;
  cin >> n;
  n2 = n;  //记录n的值用于循环的处理,其实可以优化把2个大的while循环合并成一个
  vector<int> tuple[n + 5];    //vector保存每一个元组
  while (n2--) {
    cin >> m;
    for (int i = 0; i < m; i++) {
      cin >> temp;
      tuple[n2].push_back(temp);
    }
  }
  while (n--) {
    m = tuple[n].size();   //记录当前元组的元素个数,也可以不记录,用vector的迭代器
    while ((k++) < 1000) {
      temp = tuple[n][0]; //这里要特别注意,因此是用前一个数减后一个数,如果不先保存第一个数的结果
      for (int i = 0; i < m; i++) {  //在最后一个数减第一个数的时候,这时候的第一个数的值不再是原本的那个值
        if (i == m - 1)
          tuple[n][i] = abs(tuple[n][i] - temp);
        else
          tuple[n][i] = abs(tuple[n][i] - tuple[n][i + 1]);
        if (tuple[n][i] == 0)
          flag++;   //记录当前元组中0元素的个数
      }
      if (flag == m)  //如果个数等于元组的元素数目,说明是ZERO型的,跳出循环
        break;
      else
        flag = 0;
    }
    if (flag == m)
      cout << "ZERO" << endl;
    else
      cout << "LOOP"<<endl;
    // if ((flag == m) && (n != 0))
    //   cout << "ZERO" << endl;
    // if ((flag == m) && (n == 0))
    //   cout << "ZERO";
    // if ((flag != m) && (n != 0))
    //   cout << "LOOP" << endl;
    // if ((flag != m) && (n == 0))
    //   cout << "LOOP";
    k = 0;   //每一次循环结束记得将循环次数k和0元素个数标识重置
    flag = 0;;
  }
  return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值