Сума на нечетните числа – в три варианта

Да се напише програма, която позволява:

  1. да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.
  2. да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.
  3. да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.

Нарочно задавам три уж подобни като условие, но всъщност доста различни задачи. Помислете как може да бъде решена всяка от тях и вижте кое е общото и различното между решенията.

Публикувано в 11а, 11в с етикети . Постоянна връзка.

6 коментара по Сума на нечетните числа – в три варианта

  1. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int n,n_poredni,n_wuwedeni,suma_p=0,suma_red=0,suma_nech=0,wuwedeno;
        cout<<"Wuwedete chisloto do koeto da se izwedqt wsichki nechetni ";
        cin>>n_poredni;
        cout<<"Wuwedete broq na chislata za wuwejdane ";
        cin>>n_wuwedeni;
        if (n_wuwedeni==0) n=1;
        else n=n_wuwedeni;
        bool poredni=false;
        for (int i=1;i<=n;i++)
        {
            if (!poredni)
               {
                 for(int p=1;p<=n_poredni;p+=2)
                         {
                           cout<<p<<endl;
                           suma_p+=p;
                         }
                 poredni=true;
                 if (n_wuwedeni>0) cout<<"\nWuwedete chislata\n";
               }
            if (n_wuwedeni==0) break;        
            if (i<=n_wuwedeni)
               {
                 cin>>wuwedeno;
                 suma_nech+=wuwedeno*(wuwedeno%2);
                 if (i%2) suma_red+=wuwedeno;
               }
            }
        cout<<"\nSumata na chislata do "<<n_poredni<<" e "<<suma_p<<endl;
        if (n_wuwedeni>0)
           {
            cout<<"Sumata na wuwedenite nechetni e "<<suma_nech<<endl;
            cout<<"Sumata na wuwedenite nechetni po red e "<<suma_red<<endl;
           }
        else cout<<" Nqma wuwedeni chisla \n"; 
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
  2. Gadget каза:
     
    int N,sumN,sum_br,sum_brN,br,ch;
        //Sumata na otpechatanite nechetni chisla
        sumN=0;
        //Sumata na vuvedenite nechetni chisla
        sum_br=0;
        //Sumata na chislata s necheten poreden nomer
        sum_brN=0;
        
        cout<<"Vavedete N do koeto da se otpechatat vsichki nechetni chisla: ";
        cin>>N;
        
        //Otpechatvame nechetnite chisla ot 1 do N
        for(int i=1;i<N;i+=2){
          cout<<i<<" ";
          sumN+=i;
        }  
        cout<<"nn"; 
    
        cout<<"Vavedete jelaniqt broi chisla: ";
        cin>>br;
        for(int j=1;j<=br;j++){
           cout<<"Vavedete chislo "<<j<<": ";
           cin>>ch;
           //Pribavqme vuvedenite nechetni chisla
           if(ch%2==1)
            sum_br+=ch;
           //Pribavqme chislata koito imat necheten poreden nomer
           if(j%2==1)
            sum_brN+=ch;
        }
            cout<<"nSumata na otpechatanite nechetni chisla do N e: "<<sumN<<"nn";
            cout<<"Sumata na vuvedenite nechetni chisla e: "<<sum_br<<"nn";
            cout<<"Sumata na chislata s necheten poreden nomer e: "<<sum_brN<<"nn";
    
    • Данаил каза:

      Много добро решение, Ники! Чисто и оптимално.

      При условие, че навсякъде имаме като горна граница (на числата или на броя въвеждания) все N и ако в задачата не се искаше отпечатване на нечетните числа, а само на сумите им, можете ли с Калоян да предложите и дори още по-оптимално решение?

  3. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int granica,n,suma=0,wuwejdaniq;
        cout<<"Wuwedi gorna granica ";
        cin>>granica;
        n=granica/2+granica%2; //opredelqne broq na nechenite chisla za da se zamesti w dolniq red
        cout<<"Sumata na nechetnite chisla e "<<(2+(n-1)*2)*n/2<<endl;
        cout<<"Wuwedete broq na wuwejdaniqta ";
        cin>>wuwejdaniq;
        int chislo,suma_wuwejdaniq=0, suma_red=0;
        for (int i=1;i<=wuwejdaniq;i++){
            cin>>chislo;
            suma_wuwejdaniq+=chislo*(chislo%2);
            suma_red+=chislo*(i%2);
            }
        cout<<"Sumata na nechetnite wuwedeni chisla e "<<suma_wuwejdaniq<<endl;
        cout<<"Sumata na nechetnite po red na wuwejdane chisla e "<<suma_red<<endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
  4. Gadget каза:
     
    int N,sumN,sum_br,sum_brN,ch;
        
        sumN=0;
        sum_br=0;
        sum_brN=0;
      
        cout<<"Vavedete N (do koeto da se otpechatat vsichki nechetni chisla): ";
        cin>>N;     
    
        for(int j=1;j<=N;j++){
           if((j%2==1)&&(j!=N))
           sumN+=j; 
           cout<<"Vavedete chislo "<<j<<": ";
           cin>>ch;
           //Pribavqme vuvedenite nechetni chisla
           if(ch%2==1)
            sum_br+=ch;
           //Pribavqme chislata koito imat necheten poreden nomer
           if(j%2==1)
            sum_brN+=ch;
        }
            cout<<"\nSumata na (otpechatanite) nechetni chisla do N e: "<<sumN<<"\n\n";
            cout<<"Sumata na vuvedenite nechetni chisla e: "<<sum_br<<"\n\n";
            cout<<"Sumata na chislata s necheten poreden nomer e: "<<sum_brN<<"\n\n";
     

Вашият коментар