*问题 F: 2026 模拟测试2(三数之和)

题目描述

有3个整数a1,a2,a3。已知0 <= a1, a2, a3 <= n,而且a1 + a2是2的倍数,a2 + a3是3的倍数, a1 + a2 + a3是5的倍数。你的任务是找到一组a1,a2,a3,使得a1 + a2 + a3最大。

输入

输入的第一行是一个正整数t,表示测试数据的数目。接下来的t行,每行给出一个n (0 <= n <= 100)的值。

输出

对于每一个n的值,输出a1 + a2 + a3的最大值。

样例输入 复制

2
0
3

样例输出 复制

0
5
#include <stdio.h>

int main()
{
    int t, n;
    while (scanf("%d", &t) != EOF)
    {
        while(t--) 
        {
            scanf("%d", &n);
            int max_sum = -1; 
            for(int a1=n;a1>=0;a1--)
            {
                for(int a2=n;a2>=0;a2--)
                {
                    for(int a3=n;a3>=0;a3--)
                    {
                        if((a1+a2)%2==0 && (a2+a3)%3==0 && (a1+a2+a3)%5==0)
                        {
                            int sum = a1+a2+a3;
                            if(sum > max_sum)
                            {
                                max_sum = sum; 
                            }
                        }
                    }
                }
            }
            printf("%d\n", max_sum); 
        }
    }

    return 0;
}

思考为什么这个程序是错的 

这个程序错的非常离谱

1.变量过多且无意义

2.循环条件鬼迷着眼 a n分不清

3.在修改的过程中,试图 加上sum和max_sum的比较,但是因为没有更新值,所以最后还是出了一些问题,关于这个,

 

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	int a1,a2,a3;
	int t;
	int n;
	int c1=(a1+a2)%2,c2=(a2+a3)%3,c3=(a1+a2+a3)%5;
	int flag=0;
	while(scanf("%d",&t)!=EOF)
	{
	    while(t--)
	    {
	        scanf("%d",&n);
	    flag=0;
	    for(a1=n;n>=0;a1--)
	    {
	        for(a2=n;n>=0;a2--)
	        {
	            for(a3=n;n>=0;a3--)
	            {
	                if(c1==0)
	                {
	                    if(c2==0)
	                    {
	                        if(c3==0)
	                        {
	                            flag=1;
	                            break;
	                        }
	                    }
	                }
	            }
	            if(flag)
	            break;
	        }
	        if(flag)
	            break;
	    }
	    printf("%d\n",c3);
	    }
	    
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值