原创
加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
此题思路很简单,有48个‘+’号,题目要求将其中两个不相邻的 ‘+’ 号变成 ‘*’ 号后式子得出的结果是2015.
从第1个 ‘+’ 号开始遍历,依次将第1~46个 ‘+’ 号变成 ‘*’ 号,定位好第一个 ‘+’ 号后,定位第二个 ‘+’ 号,
即从第一个 ‘+’ 号后定位第二个 ‘+’ 号(注意第一个 ‘+’ 号前面不能是 10 )。定位好两个 ‘+’ 号后判断式
子值是否等于2015,等于跳出循环,否则继续循环。
#include<stdio.h> int main() { int i; int s1=0; int s2=0; int total=0; int j; for(i=1;i<=46;i++) //i,j值不能变 { if(i==10) continue; s1=i*(i+1); //第一个*值 for(j=i+2;j<=48;j++) { s2=j*(j+1); //第二个*值 int vari; for(vari=1;vari<=49;vari++) { if( vari!=i && vari!=i+1 && vari!=j && vari!=j+1 ) total=total+vari; } total=total+s1+s2; if(total==2015) { printf("%d",i); return 0; } else { total=0; continue; } } } printf("%d",i); return 0; }
后段代码思路是相同的,是自己后面复习重新敲的。
#include<stdio.h> int flag=0; int ff=0; int main(){ int i=0; int j=0; //j代表第一个*前面的数字 int z=0; //z代表第二个*前面的数字 int total=0; for(j=1;j<=46;j++){ //定位第一个* if(j==10){ continue; } for(i=1;i<=49;i++){ if(i==j){ //定位好第一个* total+=i*(i+1); int i_t=0; while(i_t!=i+2){ i_t++; } int total_=total; //备份第一阶段的总值 int i_tt=i_t; //备份第一阶段的后值 for(z=j+2;z<=48;z++){ //定位好第二个* for(i_t=i_tt;i_t<=49;i_t++){ if(i_t==z){ total+=i_t*(i_t+1); i_t++; } else{ total+=i_t; } } if(total==2015){ printf("%d",j); flag=1; break; } else{ total=total_; } } ff=1; } else{ total+=i; } if(flag==1){ break; } if(ff==1){ total=0; ff=0; break; } } if(flag==1){ break; } } return 0; }
答案:16
13:25:54
2018-05-15