当前位置: 代码迷 >> 综合 >> Ducci序列(Ducci Sequence, ACM/ICPC Seoul 2009, UVa1594)
  详细解决方案

Ducci序列(Ducci Sequence, ACM/ICPC Seoul 2009, UVa1594)

热度:73   发布时间:2024-01-28 21:29:48.0
对于一个 n 元组 ( a 1 , a 2 , …, a n ) ,可以对于每个数求出它和下一个数的差的绝对值,得到
一个新的 n 元组 (| a 1 - a 2 |, | a 2 - a 3 |, …, | a n - a 1 |) 。重复这个过程,得到的序列称为 Ducci 序列,例如:
(8, 11, 2, 7) -> (3, 9, 5, 1) -> (6, 4, 4, 2) -> (2, 0, 2, 4) -> (2, 2, 2, 2) -> (0, 0, 0, 0).
也有的 Ducci 序列最终会循环。输入 n 元组( 3≤ n ≤15 ),你的任务是判断它最终会变成 0
还是会循环。输入保证最多 1000 步就会变成 0 或者循环。
 
 
#include<iostream>
#include<cmath>
using namespace std;
main()
{  
int t;
cin>>t;
while(t--)
{  int n,a[20],i,k;
cin>>n;
for( i=0;i<n;i++)
cin>>a[i];

for(k=0;k<1002;k++)
{  int ans=0;
int s=a[0],j;
for(j=0;j<n-1;j++)
{   a[j]=abs(a[j]-a[j+1]);
if(a[j]==0)
ans++;
}
a[j]=abs(a[j-1]-s);
if(a[j]==0)
ans++;
if(ans==4)
{  cout<<"NO";
break;
}

}
if(k>=1001)
cout<<"LOOP";
cout<<endl;

} 
return 0;
}
  相关解决方案