1. 程式人生 > >加法變乘法——第六屆藍橋杯C語言B組(省賽)第六題

加法變乘法——第六屆藍橋杯C語言B組(省賽)第六題

clu 自己 nbsp 加法 藍橋杯 重新 () std spa

原創


加法變乘法

我們都知道: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組(省賽)第六題