题目:

1:解题第一步看题目和数据范围 1-100 数据范围不大。直接暴力
2:我们先在纸上面模拟一遍我们自己思路
3:开始通过自己的思路编码 思路入下图代码段
#include<iostream>
using namespace std;
const int n=1e3;
int a[n],b[n],sum[n]; //分别为我们的原数据数组,当前用来数数的数组,记录每一次从i开始数数的和的数组
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++) //千万不可以从1开始输入,不然会和后面的思维冲突 小编也是被从1开始坑了1个多小时
{
cin >> a[i];
b[i]=a[i];
}
for(int i=0;i<n;i++)//模拟从第一个开始数到从n开始数数的过程
{
int j;
int k=i;
int l=1; //l=1 表示从1开始数数
while(1)
{
while(b[k]==0)
{
k=(k+1)%n; //k的范围是0-n 但是如果a从 1开始输入,a[0]就处理不到了
}
if(b[k]==l) //当前数到数相匹配
{
sum[i]+=b[k]; //配对上了
l=1; //当配对上重新从1开始数
b[k]=0;
for(j=0;j<n;j++) //判断是否全部取完
{
if(b[j]!=0)
break;
}
if(j==n) //当全配对上直接退出到上层循环
break;
}
else
{
l++; //没有配对上 数下一个数
}
if(l>n)
break;
k=(k+1)%n;
}
for(int j=0;j<n;j++)//重新将a数组存入b中,从下一个数开始数
{
b[j]=a[j];
}
}
int sum_m=-1;//遍历,输出最大值
for(int i=0;i<n;i++)
{
if(sum[i]>sum_m)
sum_m=sum[i];
}
cout << sum_m;
}

389





