题目描述
有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);
}
}
}