1 Востаннє редагувалося Replace (29.01.2015 01:45:39)

Тема: Число Армстронга

Допоможіть розібратися з програмою. Вчуся заочно, часу в обріз, але хочеться самому зрозуміти, як правильно повинна бути написана ця програма.
Суть завдання: Натуральне число з n цифр є числом Армстронга, якщо сума його цифр, зведених в n-у ступінь, дорівнює самому числу (наприклад, 153).
Отримати всі числа Армстронга, менші n (в n до 4 цифр).
Ось моя "печаль" ... заплутався остаточно, підкажіть, що не так? І як повинно бути? Просто видає всі числа під ряд. Допоможіть, будь ласка! Хочу навчитися програмувати, а не замовляти ...

Код C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            int a, b, c;
            for (a = 0; a < 10; a++)
                for (b = 0; b < 10; b++)
                    for (c = 0; c < 10; c++)
                    {
                        double l = Math.Pow(a, 3) + Math.Pow(b, 3) + Math.Pow(с, 3);
                        double k = a * 100 + b * 10 + c;
                        if ((l = k) < 1000) Console.WriteLine(k);
                        Console.ReadKey();
                    }
        }
    }
}

2

Re: Число Армстронга

Код в тег code, будь-ласка.
Коли заплутались, спробуйте перейменувати змінні з a,b,c на змістовні.
А ще ви не хочете присвоювати значення l змінній k, чи не так?

3

Re: Число Армстронга

quez хотів сказати, що l = k - присвоєння, а l == k - порівняння. Ну і не обов'язково результат порівняння (true чи false) порівнювати із 1000, це просто безглуздо.

4

Re: Число Армстронга

Ну а чого, тру завжди менше 1000

5

Re: Число Армстронга

Vo_Vik написав:

Ну а чого, тру завжди менше 1000

Залежить від того, як перевіряти. Якщо x > 1000, то if(x)... завжди виконається :)

6

Re: Число Армстронга

using System;
using System.Collections;
using System.Collections.Generic;

namespace Armstrong
{
    class Program
    {
        public static void Main(string[] args)
        {                        
            List<int> listArmstron = new List<int>();
            int N = 0;
            int[] arrNum = {0,0,0,0};
            
            for (N = 100; N < 999; N++) {
                char[] arrCh = N.ToString().ToCharArray();
                arrNum = new int[arrCh.Length];
                
                for(int i=0;i<arrCh.Length;i++)
                    arrNum[i] = Int32.Parse(arrCh[i].ToString());
                
                Int32 Sum = 0;
                for(int i=0;i<arrNum.Length;i++) {
                    Sum +=  Convert.ToInt32(Math.Pow(arrNum[i],arrNum.Length));
                    //Console.Write("arr[{0}]={1},S={2}",i,arrNum[i],Sum);
                }
                
                                
                if(N == Sum) {
                    listArmstron.Add(N);
                    //Console.Write("N={0},Ch={1},Suma={2}",N,new String(arrCh),Sum);
                }
                
            }
            foreach (int e in listArmstron) {
                Console.Write("\n{0},",e);
            }
            Console.Write("\nPress any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

7 Востаннє редагувалося Vo_Vik (13.02.2015 18:34:48)

Re: Число Армстронга

koala написав:
Vo_Vik написав:

Ну а чого, тру завжди менше 1000

Залежить від того, як перевіряти. Якщо x > 1000, то if(x)... завжди виконається :)

Я мав наувазі оце.

if ((l = k) < 1000)

але там буде не тру, а k записуватись в l і порівнюватись з 1000.

8

Re: Число Армстронга

А я мав на увазі, що 1001 розглядається як true в конструкції if(1001), і при цьому 1001 > 1000.

9

Re: Число Армстронга

false - це нуль, а true - це все що не false, тобто все що не дорівнює нулю. Від'ємні числа також true.