每日刷题(十八)
蓝桥杯第六届C语言B组省赛习题
习题F:加法变乘法
这个就直接采用暴力破解就行
题意是说要把两个不相邻的加号变成乘号,使得结果为2015
也就是说我们可以设两个“分隔点”i、j。i表示第一个乘号的位置,j表示第二个乘号的位置。把第i和第i+1项相乘,第j和第j+1项相乘,然后再把i、j前后的所有数字加起来,使得总和为2015
详细C代码如下
#include<stdio.h>
int main()
{
int i, j, sum, k, t = 0;
int a[49];
for(i = 0; i < 49; i++)
{
a[i] = i + 1;
}
// for(i = 0; i < 49; i++)
// printf("%d\t",a[i]);
for(i = 0; i < 47; i++) //第一个乘号
{
for(j = i + 2; j < 49; j++) //第二个乘号
{
sum = 0;
for(k = 0; k < i; k++) //第一个乘号以前的所有数和
{
sum += a[k];
}
sum += a[i] * a[i + 1];
for(k = i + 2; k < j; k++)
{
sum += a[k];
}
sum += a[j] * a[j + 1];
for(k = j + 2; k < 49; k++)
{
sum += a[k];
}
if(sum > 2015)
{
break;
}
if(sum == 2015)
{
printf("i = %5d,j = %5d \n", i, j);
break;
}
}
}
return 0;
}
运行结果
这是结果填空题,所以填16