码迷,mamicode.com
首页 > 编程语言 > 详细

加法变乘法——第六届蓝桥杯C语言B组(省赛)第六题

时间:2018-05-15 14:04:40      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:color   位置   提交   std   int   str   备份   一个   style   

原创


加法变乘法

我们都知道: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

加法变乘法——第六届蓝桥杯C语言B组(省赛)第六题

标签:color   位置   提交   std   int   str   备份   一个   style   

原文地址:https://www.cnblogs.com/chiweiming/p/9039483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!