//唯有这份热情。//
标签:搜索,枚举,模拟
难度:脑筋急转弯
赢球票
输入输出样例(无解释)
代码块:
#include <bits/stdc++.h>
int pos[100]={0};
void getarr(int* a,int n) {
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
}
}
int main(void) {
int a[100],n;
scanf("%d",&n);
getarr(a,n);
int sum[100]={0};
//模拟start
for(int i=1;i<=n;i++) {
int j=i;
int k=1;
int count=0;
while(1){
//重置1,确保j超限时迅速重置
if(j>n){
j=1;
}
//匹配“拿走”纸牌过程
if(pos[j]==1) {
j++;
}
//被标记后的纸牌会,空执行一次循环,标记纸牌被跳过
else{
if(a[j]==k) {
pos[j]=1;
sum[i]+=a[j];
j++;
//重置2,再次确保j不超限
if(j>n) {
j=1;
}
count++;
k=1;
}
else{
j++;
k++;
}
}
//循环结束判断条件:1,当k顺时针数一圈却没有与a[j]匹配的话,2当n个数全部匹配拿走的话,
if(k>n||count==n){
break;
}
}
//初始化标记数组
for(int m=0;m<=n;m++){
pos[m]=-1;
}
}
//输出最大
int max=-214748367;
for(int l=1;l<=n;l++){
if(sum[l]>max){
max=sum[l];
}
}
printf("%d",max);
}