蓝桥杯备战题解:赢球票

题目:

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;
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值