Diferència entre revisions de la pàgina «M3 - Programació estructurada / Exercicis UF1: Iteratius»

De wikiserver
Dreceres ràpides: navegació, cerca
Línia 307: Línia 307:
 
9. Escriviu un programa que generi els 20 primers números que en descompondre’ls en factors primers només apareguin els números 2, 3 i 5.
 
9. Escriviu un programa que generi els 20 primers números que en descompondre’ls en factors primers només apareguin els números 2, 3 i 5.
  
 +
<!--
 +
<source lang="java">
 +
package iteratius;
 +
 +
public class Ex9 {
 +
 +
    public static void main(String[] args) {
 +
 +
        int cont=0, div, valoractual=0, num=2;
 +
        boolean posible;
 +
        while (cont<20) {
 +
          div=2;
 +
          valoractual = num;       
 +
          posible=true;
 +
          while (valoractual>1 && posible){
 +
              if (valoractual%div==0) valoractual=valoractual/div;
 +
              else {
 +
                  div++;               
 +
                  if (div > 5) posible=false;
 +
              }
 +
          }
 +
          if (posible){
 +
            System.out.print(num+",");
 +
            cont++;
 +
        }
 +
        num++;         
 +
    } 
 +
                   
 +
    }   
 +
}
 +
</source>
 +
-->
  
 
10. Escriviu un programa que mostri tots els números de tres xifres que compleixen que cada una de les xifres és més gran que les que té més a l’esquerra. Per exemple : 123, 248,....
 
10. Escriviu un programa que mostri tots els números de tres xifres que compleixen que cada una de les xifres és més gran que les que té més a l’esquerra. Per exemple : 123, 248,....

Revisió del 21:55, 12 feb 2018

1. Trobar i mostrar tots els números de quatre xifres que compleixen la condició de què la suma de les xifres en posició senar és igual a les xifres en posició parell. Per exemple : 8217

package iteratius;

public class Ex1 {
    
    public static void main(String[] args) {
        int sumpar, sumimpar, num;
        for (int i=1000;i<=9999;i++){
            num=i;
            sumpar=0;
            sumimpar=0;
            for (int j=1;j<=4;j++){
                if(j%2==1){
                    sumimpar=sumimpar+(num%10);
                }
                else{
                    sumpar=sumpar+(num%10);
                }
                num=num/10;
            }
            if (sumpar==sumimpar){
                System.out.println(i);
            }
        }
    }
}


2. Un centre numèric és un nombre que separa una llista d’enters (començant en 1) en dos grups de números, les sumes dels quals són iguals. El primer centre numèric és el 6, el qual separa la llista (1-8) en els grups (1,2,3,4,5) i (7,8) les sumes de les quals són iguals a 15. El segon centre numèric és el 35, que separa la llista (1 a 49)en els grups (1 a 34) i (36 a 49) les sumes de les quals són iguals a 595. Escriviu un programa que calculi els centres numèrics entre 1 i n (número entrat per l’usuari).

package iteratius;
import java.util.Scanner;

public class Ex2 {
    
    public static void main(String[] args) {
    
        Scanner teclat = new Scanner(System.in);
        int num, sumaant=0, sumapost=2, numpost=2;
        System.out.println("Introdueix un valor positiu: ");
        num = teclat.nextInt();
        for (int i=2;i<=num;i++){
            sumaant=0;
            sumapost=0;
            for(int j=1;j<i;j++){
                sumaant = sumaant+j;      //Sumem els numeros anteriors        
            }
            numpost = i+1;
            while (sumaant>sumapost){
                sumapost=sumapost+numpost;  //Sumem els numeros posteriors
                numpost++;
            }
            if (sumaant==sumapost){
                System.out.println("El numero "+i+" es centre numeric.");
            }
        }
    }
}

Donat que cada vegada hem de calcular la suma dels números anteriors al actual, podríem optimitzar el codi, si mantenim la suma dels nombres anteriors a cada iteració i li sumem el número actual -1. Vegem-ho:

package iteratius;
import java.util.Scanner;

public class Ex2 {
    
    public static void main(String[] args) {

        Scanner teclat = new Scanner(System.in);
        int num, sumaant=0, sumapost=2, numpost=2;
        System.out.println("Introdueix un valor positiu: ");
        num = teclat.nextInt();
        for (int i=2;i<=num;i++){
            sumaant=sumaant+i-1;          //Suma dels numeros anteriors 
            sumapost=sumapost-i;
            while (sumaant>sumapost){
                numpost++;
                sumapost=sumapost+numpost;  //Sumem els numeros posteriors               
            }
            if (sumaant==sumapost){
                System.out.println("El numero "+i+" es centre numeric.");
            }
        }
    }
}


3. Per trobar el màxim comú divisor (mcd) de dos números s’utilitza l’algorisme d’Euclides. Donat dos números enters a i b, es mira quin és el més gran. Si el més gran és a, es substitueix per a - b; si el més gran és b es substitueix per b – a, i així successivament fins que a = b. Aleshores a és el mcd. Escriviu un programa que calculi el mcd de dos números.


4. Calculeu aproximadament l’arrel quadrada d’un número real positiu r seguint el mètode de Newton. La successió x 1 , x 2 , x 3 , ..., que està definida per :

                        ( x i + r / x i )
x 0 = r / 2 ,  x i+1 =  _________________ 
                               2

té com a límit l’arrel quadrada de r. El programa acabarà quan |x n+1 – x n | < 0.0001

Nota: Els símbols | | volen dir valor absolut, per calcular-ho existeix la funció Math.abs( ).


5. Es diu que un número es perfecte si la suma dels seus divisors és igual al mateix número. Per exemple el número 6 és perfecte perquè la suma dels seus divisors (1+2+3) és igual a 6. Trobeu tots els números perfectes entre 1 i un numero introduït per teclat.


6. Es diu que un número és deficient si no arriba a ser perfecte. perquè la suma dels divisors del número és menor que el número. En el sentit contrari, es diu que un número és abundant si la suma dels divisors és més gran que ell. Construïu un programa que per a un rang de 1 a n, sent n entrada pel programa, determini si el número és deficient, perfecte o abundant. Indiqueu també quants hi ha de cada un dels tipus.


7. Es diu que dos números són primers bessons si ambdós són primers i estan separats per una distància de 2. Per exemple : {3,5}, {5,7}, {11,13},{17,19}. Construïu un programa que donat un rang de 1 a n, sent n entrada pel programa, determini els primers bessons que hi ha en aquest rang.


8. Es diu que dos números són amics si la suma dels divisors d’un donen com a resultat el valor de l’altre i viceversa. Construïu un programa que determini si dos números n1i n2 entrats per teclat són amics o no.

Exemple: (220, 284)
divisors de 220: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 i 110. Suman 284.
divisors de 284: 1, 2, 4, 71 i 142. Suman 220.


9. Escriviu un programa que generi els 20 primers números que en descompondre’ls en factors primers només apareguin els números 2, 3 i 5.


10. Escriviu un programa que mostri tots els números de tres xifres que compleixen que cada una de les xifres és més gran que les que té més a l’esquerra. Per exemple : 123, 248,....


11. Escriviu un programa que mostri tots els números de tres dígits que siguin iguals a la suma dels cubs dels seus dígits.

Solució: 153, 370, 371, 407