Executando verificação de segurança...
1

beecrowd - 1323 - Feynman(Me Ajude a Resolver, Camaradas)

Estou tentando resolver este desafio em c# mas minha resolução não Funciona, Alguém pra ajudar?

O Desafio é este abaixo

Richard Phillips Feynman era um físico americano muito famoso e ganhador do Prêmio Nobel de Física. Ele trabalhava em física teórica e também foi pioneiro no campo da computação quântica. Ele visitou a América do Sul por dez meses, dando palestras e aproveitando a vida nos trópicos. Ele também é conhecido pelos livros "Surely You’re Joking, Mr. Feynman!" e "What Do You Care What Other People Think?", que inclui algumas de suas aventuras abaixo do equador.

Sua paixão da vida inteira era resolver e criar quebra-cabeças, trancas e códigos. Recentemente, um fazendeiro idoso da América do Sul, que hospedou o jovem físico em 1949, achou alguns papéis e notas que acredita-se terem pertencido a Feynman. Entre anotações sobre mesóns e eletromagnetismo, havia um guardanapo onde ele escreveu um simples desafio: "quantos quadrados diferentes existem em um quadriculado de N x N quadrados?".

No mesmo guardanapo havia um desenho, que está reproduzido abaixo, mostrando que para N = 2, a resposta é 5.

Entrada
A entrada contém diversos casos de teste. Cada caso de teste é composto de uma única linha, contendo apenas um inteiro N, representando o número de quadrados em cada lado do quadriculado (1 ≤ N ≤ 100).

O final da entrada é indicado por uma linha contendo apenas um zero.

**Saída
Para cada caso de teste na entrada, seu programa deve imprimir uma única linha, contendo o número de diferentes quadrados para a entrada correspondente.
**
Exemplo de Entrada
2
1
8
0
Exemplo de Saída
5
1
204

Meu código

using System; 

class URI {

    static void Main(string[] args) { 
        
        int N = int.Parse(Console.ReadLine());
        int r = 0;

       

        while (true)
        {
            while (N < 0 || N > 100 ) 
            {
                N = int.Parse(Console.ReadLine());
            }
        
            if (N == 0)
            {
                break;
            }
            
            for (int i = 0; i <= N; i++)
            {
                r += i * i;
            }
            Console.WriteLine(r);
            r = 0;
            N = int.Parse(Console.ReadLine());
        }
    }
}
Carregando publicação patrocinada...
1

Eu não vou te ajudar resolver, até porquen ão disse qual é a dificuldade que está tendo, mas pode dizer que este código quebra se digitar uma letra poe exemplo e fere a premissa básica, e ele poderia ter sio feito até mesmo com 5 linhas úteis (6 com o }). Poderia ter apenas 2 loops, e até mesmo 1 se fizesse uma pré memoização dos resultados de 1 a 100, que seria mais rápido de executar, mas gastaria um pouco mas de memória. Pesquise mais. Melhorar o código pode ficar com um exercício extra.

Cuidado com o ciclo: aprende errado, treina-o, recebe validação, ensina errado, briga pelo erro.

Ajudei? Era o meu desejo.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Conteúdo excluído
3

Consegui resolver, passei na submissão com este código.
`using System;

class URI {

static void Main(string[] args) { 
    
    int N = int.Parse(Console.ReadLine());
    int r = 0;

   

    while (true)
    {
        while (N < 0 || N > 100 ) 
        {
            N = int.Parse(Console.ReadLine());
        }
    
        if (N == 0)
        {
            break;
        }
        
        for (int i = 0; i <= N; i++)
        {
            r += i * i;
        }
        Console.WriteLine(r);
        N = int.Parse(Console.ReadLine());
        r = 0;
    }
}

}`

2

Creio que dá pra ser mais simples. Primeiro que não precisa validar, pois pelo que entendi do enunciado, ele já garante que os números estarão entre 1 e 100. Basta ver se é zero para saber quando deve parar.

Além disso, tem uma fórmula mais simples para não precisar do loop interno:

while (int.TryParse(Console.ReadLine(), out int n))
{
    if (n == 0)
    {
        break;
    }
    Console.WriteLine(n * (n + 1) * (2 * n + 1) / 6);
}

Pelos casos de teste fornecidos, parece OK. Também fiz um programa comparando a fórmula com o loop e também está certo. Só não testei no beecrowd porque agora eles exigem que vc preencha 100% do seu perfil, e sinceramente não estou com paciência...

1

A proposta do beecrowd é justamente as pessoas se desafiarem a resolverem os problemas de programação, tem um fórum interno para que as pessoas possam responder as dúbidas uma das outras e todo o código após o problema solucionado é removido.

Porque ir contra a proposta da plataforma e postar seu código na internet?

1

Porque na plataforma não tinha discussão em c#!
E creio que se existe uma plataforma como está, aberta a perguntas e dúvidas sobre tecnologia, eu posso muito bem vir aqui e perguntar, não seja moralista e chatão e não problematize tudo!
O mundo agradece.