Sinto muito, sou meio novo em codificação, mas me pediram para pegar um número inteiro como entrada para o enésimo termo e imprimir o valor desse padrão, e escrevi algo que funciona da maneira que sinto, como se eu estou muito complicando as coisas. Aqui está a série em questão:
y = -(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5) .... (1+2 +3+4...+n)
Aqui está o código:
import java.util.Scanner;
public class wontwork {
public static void main(String[] args) {
Scanner np = new Scanner(System.in);
System.out.println("Enter n");
int n = np.nextInt();
int count = 1;
int sum = 0;
int y = 0;
for(int i = 1; i<=n ; i+=2) {
if(count%2==0) {
sum+=i;
y+=sum;
sum+=i+1;
y+=sum;
}
else {
sum+=i;
y-=sum;
sum+=i+1;
y-=sum;
}
count++;
}
if(n%2!=0) {
if (count%2==0) {
System.out.print(y+sum);
}
else {
System.out.print(y-sum);
}
}
else {
System.out.print(y);
}
np.close();
}
}
Uma saída de amostra deve fornecer 12 quando a entrada 4 e -3 quando a entrada 5.
Pelo que entendi é subtrair duas vezes e somar duas vezes a soma dos valores. E o que eu fiz foi criar um loop for e pegar uma variável de contagem que verifica se deve primeiro adicionar ou subtrair dependendo se é ímpar ou par e então pegar uma variável de soma para calcular os valores de cada iteração entre colchetes e adicionar ou subtraímos isso para y.
Mas para cada vez que o loop é executado, esse processo acontece duas vezes. Então y é adicionado por -(1) e -(1+2) o primeiro loop quando a contagem é ímpar e depois por (1+2+3) e (1+2+3+4) no próximo quando a contagem é par. Eu fiz isso porque se eu somar digamos (1+2+3) individualmente sendo a contagem par, tenho que somar também (1+2+3+4) e incrementar a contagem, porém, isso a torna ímpar, e é não é mais útil usar isso para adicionar ou subtrair. Eu odiaria se estivesse faltando algo óbvio, mas não consigo descobrir de que outra forma saber quando é incrementado duas vezes para torná-lo positivo ou negativo.
Por esse motivo, também, se não fosse pela instrução if else no final, o programa apenas gera os valores corretos para cada 2n e para corrigir isso peguei o último valor da soma armazenado e verifiquei se a contagem é ímpar ou par e então adicionei ou subtraído novamente com y para encontrar o valor médio de n. Peço desculpas se não escrevi ou formatei nada incorretamente, pois este é meu primeiro post aqui, mas deixe-me saber o que mais posso fazer. Eu apreciaria qualquer ajuda.
Parece que você deseja subtrair dois termos, adicionar dois termos, subtrair dois termos, eventualmente subtraindo ou adicionando um ou dois termos conforme apropriado.
A maneira mais fácil, na minha opinião, é usar
arithemetic sum formula
for 1 + 2 + 3 + 4 .. + n que é((n+1)*n)/2
. Quandoi
ficar par, inverta o sinal.estampas
No seu código, por que você escolhe
i += 2
? Isso torna seu código complexo. Aqui está um código mais simples.Funcionará corretamente.
Se eu estiver errado, me desculpe
Isso começa a vida como um problema de modelagem. Ignore y = e observe o que cada etapa faz: na etapa zero, -1. Na etapa -1. Na etapa 1, -(1+2). Na etapa 2, +(1+2+3), Na etapa 3, +(1+2+3+4). No passo 4, -(1+2+3+4+5), etc. então em cada passo i somamos 1 até i+1, e então precisamos de uma declaração simples que nos diga qual deve ser o sinal sem ter para rastreá-lo: 0=-, 1=-,2=+,3=+, 4=-, etc então o ciclo se repete a cada 4 etapas, então começamos com i% 4, que é sempre positivo, precisamos de 2 termos para ser negativo, então
i % 4 - 2
- exceto que isso nos dará -1, +1 ou zero como sinais possíveis, então distorcemos isso apenas um pouquinho parai % 4 - 1.99
e agora obteremos -1 ou +1 para 0, 1 e 2, 3 respectivamente.E então, com isso, podemos calcular cada etapa da soma que produz
y
: