Sumowanie kolejnych liczb aż wynik da równe 100

0

Witam.
Jest to mój pierwszy post przeszukałem całe "google" i nigdzie nie znalazłem tego czego na prawdę oczekuję.
A więc tak udało mi się zrobić sumę wpisywanych liczb z klawiatury, lecz teraz chce by zaczęło od 0 i i dodawało po kolei aż suma liczb nie osiągnie wyniku 100.
Nie chce kompletnego kodu lecz tylko wyjaśnienia dokładnego.

using System;
namespace suma_cyfr
{

    class Class1
    {


        static void Main(string[] args)
        {
            int x, wynik;
            
                Console.WriteLine("Podaj liczbe");
                x = int.Parse(Console.ReadLine());
                wynik = 0;
              

                for (wynik = 0; wynik < 100; wynik = wynik + 1)
                {  while (x != 0)
                    {
                        wynik += x % 10;
                        x /= 10;
                    }
                Console.WriteLine(wynik);}
                
            
          
            Console.WriteLine("Wduś byle jaki klawisz by zamknąc program.");
            Console.ReadLine();
        }
    }
} 

z góry dziękuję.

0

Generalnie musisz zrobic tak: wez ten program, ktory juz napisales, sumujacy liczby z klawiatury (ort!, ze jest tam jakas petla), przy kazdej iteracji sprawdzasz ort! sume i jesli jest ona rowna/wieksza od 100 to po prostu przerywasz petle ;)

0

tak, tylko teraz takie coś na studiach zadano mi że mam napisać program

  1. Ja wpisuję liczbę i mi sumuję każda cyfrę.
  2. Nic nie wpisuje, zaczyna od zera i sumuje wszystko. Skopiowałem pętelkę while lecz się pogubiłem.
    za x podstawiłem 0 ale też klapa
0

Może opisz jeszcze raz dokładniej co ten program ma robić, bo w każdym poście podajesz coś innego. W pierwszym dodaje liczby, w drugim dodaje cyfry liczb. Co to znaczy ''zaczyna od zera i sumuje wszystko"? Co od zera? Co to jest wszystko?

0

Przepraszam za moją niedokładność.
Po prostu treść zadania brzmi: Napisz program wczytujący kolejne liczby z klawiatury i kończący się gdy: suma tych liczb nie przekroczy 100.
Jeżeli to jest teraz nie zrozumiałe proszę kierować pytanie do P.psor. :D

0

Poddaje się, za dużo pomoc kolegi nie dała mi.

0
 using System;
namespace suma_cyfr
{

    class Class1
    {


        static void Main(string[] args)
        {
            int x, wynik, a, b, c;
            Console.WriteLine("Sumę cyfr, jeżeli tak wduś 1");
            a = int.Parse(Console.ReadLine());
            if (a == 1)
            {
                Console.WriteLine("Podaj liczbe");
                x = int.Parse(Console.ReadLine());
                wynik = 0;
                while (x != 0)
                {
                    wynik += x % 10;
                    x /= 10;
                }


                Console.WriteLine("suma cyfr podanej liczby wynosi " + wynik);
                Console.ReadLine();
            }
            
            Console.WriteLine("Wduś enter by zamknąc program.");
            Console.ReadLine();
        }
    }
}
1

Tak na moje oko, to ten program jakos tam liczy sume cyfr wczytanej liczby, a nie to, o czym pisales:

przemek1994 napisał(a):

A więc tak udało mi się zrobić sumę wpisywanych liczb z klawiatury

Rzeczy na szybko do poprawy:

  • wczytywanie kolejnych liczb w petli, np while(a!=1) {} do{} while(a!=1), w ktorej to petli dodajesz wczytana liczbe do sumy
  • dodanie warunku przed/po dodaniem liczby, czy suma przekroczy 100, jak przekroczy to Console.WriteLine("Przekroczono zakres, wynik: ", wynik); break;
0

o to mi chodziło !
Wielkie dzięki.

0

Tak dla zabawy - wersja "I knows linq": Console.WriteLine(Console.ReadLine().ToCharArray().Sum(ch => ch - '0'));

Wersja z sumowaniem ciągu liczb jest ciut dłuższa, bo nie mogę wykombinować jak w jednej linijce czytać i od razu zwracać IEnumerable<string>:

		static IEnumerable<string> ConsoleInputAsEnumerable()
		{
			while (true) yield return Console.ReadLine();
		}


		static void Main(string[] args)
		{
			const int max = 100;
			var sum = 0;

			ConsoleInputAsEnumerable().TakeWhile(s => (sum += int.Parse(s)) < max).ToList();

			Console.WriteLine(sum);
		}
0

Zrobiłem to w ten sposób :P

 using System;
namespace suma_cyfr
{

    class Class1
    {


        static void Main(string[] args)
        {
            for (int wynik = 0, i = 0, j = 1, suma_cyfr = 0; suma_cyfr <= 18; i++, j++)
            {
                suma_cyfr = i + j;
                wynik = wynik + suma_cyfr;
                Console.WriteLine("{0}+{1}={2}", i, j, suma_cyfr);
                Console.WriteLine("Suma wyników to:" + wynik);
                


            }

            Console.ReadKey();
        }
        }
    }
0

Po pierwsze, co to ma wspólnego z zadaniem które podałeś w temacie?
Po drugie, to co podałeś się rozwiązuje analitycznie:

  1. Sumujesz dwie kolumny i j druga z nich od 1 do N zaś pierwsza od 0 do N-1
  2. Suma pierwszej kolumny to: N*(N-1)/2 suma drugiej to: N*(N+1)/2
  3. Suma obu to: N*(N-1)/2 + N*(N+1)/2 = N*N
  4. Stąd jeżeli N*N=100 to N=pierwiastek(100)=10
  5. Czyli lecimy: for(int i=0;i<10;++i) suma+=i+(i+1);
  6. Lub: for(int i=0;i<10;++i) suma+=1+(i<<1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1