题意:
加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225、现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015。比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
思路:很简单知道是把一共C(48, 2)对加号变成乘号,除去连在一起的情况,检验得到符合要求的就可以了。
问题是。代码实现?1.两层循环可以做到?2.怎么检验?每次都是计算原式吗?讲道理是可以这样的。
【做完之后发现确实很水。然而因为开心自己想的,还是 来一篇水水的博文吧~~~】
附right代码:ans = 16
1 /* 2 加法变乘法 3 4 我们都知道:1+2+3+ ... + 49 = 1225、现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015。比如: 5 1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015就是符合要求的答案。 6 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。 7 8 注意:需要你提交的是一个整数,不要填写任何多余的内容。 9 10 思路:很简单知道是把一共C(48, 2)对加号变成乘号,除去连在一起的情况,检验得到符合要求的就可以了。 11 问题是。代码实现?1.两层循环可以做到?2.怎么检验?每次都是计算原式吗?讲道理是可以这样的。 12 */ 13 14 #include <stdio.h> 15 #include <string.h> 16 #include <iostream> 17 using namespace std; 18 19 int num; 20 int ans; 21 22 bool check(int i, int j) { 23 int temp = num; 24 int num1 = i + i+1; 25 int num2 = j + j+1; 26 temp -= (num1 + num2); 27 num1 = i * (i+1); 28 num2 = j * (j+1); 29 temp += (num1 + num2); 30 if (temp == 2015) 31 return true; 32 else return false; 33 } 34 35 int main() { 36 num = 0; 37 ans = 0; 38 39 for (int i=1; i<=49; ++i) { 40 num += i; 41 } // 初始值 42 43 for (int i=1; i<=48; ++i) { 44 for (int j=i+2; j<=48; ++j) { 45 if (check(i, j) && i != 10) { 46 ans = i; 47 break; 48 } 49 } 50 if (ans != 0) { 51 break; 52 } 53 } // C(48, 2)中所有不相连的任意两个位置检查是否符合情况。 54 55 printf("%d ", ans); 56 return 0; 57 }