Dados N e dois números inteiros positivos, i e j, diferentes de 0, imprimir em ordem
crescente os N primeiros naturais que são múltiplos de i ou de j e ou de ambos. Exemplo: Para
N = 6, i = 2 e j = 3 a saída deverá ser: 0,2,3,4,6,8.
Soluções para a tarefa
Resposta: Na verdade com 'N' = 6, 'i'=2 e 'j'=3 o resultado tem que sair 2,3,4,6, mas enfim, vou colocar o código em Java, que é possivelmente de onde precisa responder. Espero ajudar.
Explicação:
package Classes;
import java.awt.HeadlessException;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JOptionPane;
public class Problem06 extends Base{
private ArrayList<Double> numberListInteger = new ArrayList<>();
private ArrayList<Double> numberInOrder = new ArrayList<>();
private int xNumber;
private int iNumber;
private int jNumber;
private int getxNumber() {
return xNumber;
}
private void setxNumber(int xNumber) {
this.xNumber = xNumber;
}
public int getiNumber() {
return iNumber;
}
public void setiNumber(int iNumber) {
this.iNumber = iNumber;
}
public int getjNumber() {
return jNumber;
}
public void setjNumber(int jNumber) {
this.jNumber = jNumber;
}
public void solveTheProblem06() {
setxNumber(0);
setiNumber(0);
setjNumber(0);
catchNumbers();
String result = "The limit number is: " + getxNumber() + "\n"
+ "The parameters are: numbers (" + getiNumber() + " and " + getjNumber() + ")\n\n"
+ "So the number are: \n";
calculateNumbers(getxNumber(), getiNumber(), getjNumber());
int placedNumber = 0;
for(int i=0;i<numberListInteger.size();i++){
result += numberListInteger.get(i);
if((i==(numberListInteger.size()-1))){
result += ".\n";
}else if(placedNumber>5){
result += ";\n";
placedNumber = 0;
}else{
result += ", ";
placedNumber++;
}
}
JOptionPane.showMessageDialog(null, result, getCurrentlyActivity(), JOptionPane.INFORMATION_MESSAGE);
}
private void catchNumbers() {
setxNumber(catchIntNumber("Type the limit of the integers numbers: "));
do {
setiNumber(catchIntNumber("Type a number to use as parameter: "));
} while (getiNumber()>getxNumber());
do {
setjNumber(catchIntNumber("Type a another number to use as parameter: "));
} while (getjNumber()>getxNumber());
}
private int catchIntNumber(String txt){
int result = 0;
String text = txt;
do {
try {
result = Integer.parseInt(JOptionPane.showInputDialog(null, text, getCurrentlyActivity(), JOptionPane.INFORMATION_MESSAGE));
} catch (HeadlessException | NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Type a number before press any button.", getCurrentlyActivity(), JOptionPane.ERROR_MESSAGE);
}
} while (result<0);
return result;
}
private void calculateNumbers(int xNumber, int iNumber, int jNumber) {
double firstParameterCounter = 0;
double secondParameterCounter = 0;
do{
firstParameterCounter += iNumber;
if(firstParameterCounter<=xNumber){
numberListInteger.add(firstParameterCounter);
}
}while(firstParameterCounter<xNumber);
do{
secondParameterCounter += jNumber;
if(secondParameterCounter<=xNumber){
if(!(numberListInteger.contains(secondParameterCounter))){
numberListInteger.add(secondParameterCounter);
}
}
}while(secondParameterCounter<xNumber);
inputTheNumberInAscendingOrder();
}
private void inputTheNumberInAscendingOrder(){
int size = numberListInteger.size();
for(int i=0;i<size;i++){
double value = Collections.min(numberListInteger);
numberInOrder.add(value);
numberListInteger.remove(value);
}
for(int i=0;i<size;i++){
double value = numberInOrder.get(i);
numberListInteger.add(value);
}
}
}
RESOLUÇÃO EM C
#include <stdio.h>
int main(){
int n, i, j, k = 0, l = 1; // Declaração e inicialização das variaveis
printf("Digite um numero n: ");
scanf("%d", &n);
while(n <= 0){ // Todos os whiles dessa parte são para checar a condição imposta
printf("\nO numero precisa ser maior que 0, Digite um numero para n: ");
scanf("%d", &n);
}
printf("\nDigite o valor de i: ");
scanf("%d", &i);
while(i <= 0){
printf("\nO numero precisa ser maior que 0, Digite um numero para i: ");
scanf("%d", &i);
}
printf("\nDigite o valor de j: ");
scanf("%d", &j);
while(j <= 0){
printf("\nO numero precisa ser maior que 0, Digite um numero para j: ");
scanf("%d", &j);
}
while(l <= n){ // While para montar o contador
if(k % i == 0 || k % j == 0){ // Checando os multiplos
printf("%d ", k);
l = l + 1; // Aumentando o contador para que o criterio de parada seja obedecido
}
k = k + 1; // Para aumentar o valor de k e descobrir os multiplos.
}
return 0;
}