2009-02-24, 11:45
  #1
Medlem
Hej alla glada! Har lite problem med en C++ uppgift, ingen skoluppgift utan helt egen vilja...

Uppgifts formulering: "Gör ett program som beräknar summan av alla udda tal mellan 1000 och 2000. Programmet ska bara skriva ut svaret."

Det jag inte kan komma på är hur jag får ut varje udda värde för att sedan addera dem... (jag använder ett while uttryck).
2009-02-24, 11:50
  #2
Medlem
Kod:
...
int sum = 0, i;
for(i=1001;  i<2000; i+=2)
    sum += i;

std::cout << sum;
...
__________________
Senast redigerad av Doq 2009-02-24 kl. 12:05.
2009-02-24, 11:51
  #3
Medlem
kongolasse12s avatar
Nån annan hann före...

Vafan, igen skoluppgift
2009-02-24, 12:17
  #4
Medlem
kaks avatar
Citat:
Ursprungligen postat av sick-people
Hej alla glada! Har lite problem med en C++ uppgift, ingen skoluppgift utan helt egen vilja...

Uppgifts formulering: "Gör ett program som beräknar summan av alla udda tal mellan 1000 och 2000. Programmet ska bara skriva ut svaret."

Det jag inte kan komma på är hur jag får ut varje udda värde för att sedan addera dem... (jag använder ett while uttryck).
Kod:
#include <iostream>
template<bool Done, int First, int Last, int Step>
struct SumImpl {
  static const int Value = First + SumImpl< (First+Step >= Last), First+Step, Last, Step>::Value;
};
template<int First, int Last, int Step>
struct SumImpl<true, First, Last, Step> {
  static const int Value = 0;
};

template<int First, int Last, int Step>
struct Sum {
  static const int Value = SumImpl<(First>=Last), First, Last, Step>::Value;
};
int main() {
  std::cout << Sum<1001, 2000, 2>::Value;
};
Garanterat snabbare än andra program. Fast kompileringen ställer en hel del krav på kompilatorn.
2009-02-24, 13:00
  #5
Medlem
Protons avatar
Mitt förslag...förstår inte varför man ska krångla till det så mkt...
[PHP]
#include <iostream>

using namespace std;

int main(int argc, char**argv){
int sum = 0;
for(int i = 1000; i < 2000; i++){
if(i % 2 != 0) sum +=i;
}
cout << sum;
}
[/PHP]

Nåt sånt?
2009-02-24, 16:08
  #6
Medlem
tack för era snabba svar allt fungerade utmärkt nu
2009-02-24, 19:16
  #7
Medlem
cenobites avatar
Detta borde fungera och vara snabbt.
Kod:
int sum = 0;
int t1 = 1000; // kan lika gärna vara 1001
int t2 = 2000; // kan lika gärna vara 1999

// om t1 = t2 och båda är jämna så är summan 0
if ( !( (t1 == t2) && (t1 % 2 == 0) ) )
{
  // se till så att både t1 och t2 är udda
  if (t1 % 2 == 0) t1++;
  if (t2 % 2 == 0) t2--;

  // se till så att t1 är det mindre talet
  if (t1 > t2)
  {
    int temp = t1;
    t1 = t2;
    t2 = temp;
  }

  // (t2 - t1) / 2 + 1 är antalet udda tal i intervallet
  sum = (t1 + t2) * ((t2 -t1) / 2 + 1) / 2;
}
cout << sum;
Jag la till lite extra kollar som du inte behöver för uppgiften, eftersom du vet vad intervallet är.
2009-02-24, 21:53
  #8
Medlem
ojns avatar
Varför gör ni andras läxor? Tror ni på allvar de lär sig ett skit på det? Hoppas ni får jobba med sådana idioter i framtiden.

Tråd jättelåst!

/Moderator

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in