Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[JAVA] Czy liczba ułożona jest w kolejności rosnącej - Matura Maj 2012 Podstawowa

Ostatnio zmodyfikowano 2013-01-09 16:44
Autor Wiadomość
krzysiekkcn
Temat założony przez niniejszego użytkownika
[JAVA] Czy liczba ułożona jest w kolejności rosnącej - Matura Maj 2012 Podstawowa
» 2013-01-09 00:00:24
Witam,
staram się uporać z maturą z informatyki maj 2012.

Zadanie jest następujące:

Zadanie 4. Cyfry (10 pkt)
W kolejnych wierszach pliku cyfry.txt znajduje się1000 liczb naturalnych, mniejszych niż 10^9 (jeden miliard), po jednej liczbie w każdym wierszu.
Napisz program, który da odpowiedzi do poniższych podpunktów. Każdą odpowiedź zapisz w pliku zadanie4.txt, poprzedzając ją oznaczeniem odpowiedniego podpunktu.

a)  Ile liczb parzystych jest w pliku cyfry.txt?

b)  Podaj liczbę z pliku cyfry.txt, której suma cyfr jest największa oraz liczbę z tego pliku, której suma cyfr jest najmniejsza. W obu przypadkach jest tylko jedna taka liczba.

Przykład:
Dla danego zbioru liczb:
121324
66562
675100
1187010

odpowiedzią są liczby: 66562 oraz 121324, ponieważ suma cyfr liczby 66562 jest równa 25 (6+6+5+6+2) i jest największą taką sumą, zaś suma cyfr liczby 121324 (1+2+1+3+2+4) jest równa 13 i jest najmniejszą taką sumą.

c)  Wypisz wszystkie liczby z pliku cyfry.txt, których cyfry tworzą ciąg rosnący.

Przykład:
Cyfry liczby 123579 tworzą ciąg rosnący, ponieważ1<2<3<5<7<9.
Cyfry liczby 1232 nie tworzą ciągu rosnącego, ponieważ ostatnia cyfra (2) nie jest
większa od przedostatniej (3).
Cyfry liczby 34556 nie tworzą ciągu rosnącego, ponieważ cyfra trzecia (5) i cyfra
czwarta (5) są sobie równe.

Napisałem program w którym dobrze rozwiązuje podpunkty A oraz B.
Próbuje podejść do podpunktu C - niestety nie wiem jak.
Dodałem tablicę liczby[numerliczby][znak]
Np. mam liczbę:
1234
liczby[0][1]=4
liczby[0][2]=3
liczby[0][3]=2
liczby[0][4]=1

Proszę o pomoc oraz z góry pozdrawiam Krzysiek.
Program:

C/C++
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class maturacyfry {
   
    /**
    * @param args
    */
    public static void main( String[] args ) throws FileNotFoundException {
        // TODO Auto-generated method stub
        File cyfry = new File( "cyfry.txt" ); // plik powinien znajdować się w workspace/nazwaprojektu
        Scanner in = new Scanner( cyfry );
        int[] tab_cyfry = new int[ 1000 ];
        String linia;
        int i = 0;
        // dodajemy cyfry do tablicy
        while( in.hasNextLine() ) {
            linia = in.nextLine();
            tab_cyfry[ i ] = Integer.parseInt( linia );
            i++;
        }
        System.out.println( "--------------------------------A---------------------------------" );
        int parzystych = 0;
        for( i = 0; i <= 999; i++ ) {
            if( tab_cyfry[ i ] % 2 == 0 ) {
                parzystych++;
            }
        }
        System.out.println( "Liczb parzystych jest " + parzystych );
        System.out.println( "--------------------------------B---------------------------------" );
        int[] d = new int[ 1000 ];
        int digit;
        int[] tab_suma = new int[ 1000 ];
        int suma = 0;
        for( i = 0; i < 999; i++ ) {
            d[ i ] = tab_cyfry[ i ];
            while( d[ i ] > 0 ) {
                digit = d[ i ] % 10;
                d[ i ] = d[ i ] / 10;
                suma = suma + digit;
            }
            tab_suma[ i ] = suma;
            suma = 0;
        }
        // sortujemy sume
        int value;
        int j = 0;
        for( i = 1; i < 1000; ++i ) {
            value = tab_suma[ i ];
           
            for( j = i - 1; j >= 0 && tab_suma[ j ] > value; --j ) {
                tab_suma[ j + 1 ] = tab_suma[ j ];
            }
           
            tab_suma[ j + 1 ] = value;
        }
        // szukamy liczby
        //obliczam jeszcze raz sume i jednocześnie zapisuje indeks
        int[] e = new int[ 1000 ];
        int digit2;
        int suma2 = 0;
        int indeksmin = 0;
        int indeksmax = 0;
        for( i = 0; i < 999; i++ ) {
            e[ i ] = tab_cyfry[ i ];
            while( e[ i ] > 0 ) {
                digit2 = e[ i ] % 10;
                e[ i ] = e[ i ] / 10;
                suma2 = suma2 + digit2;
            }
           
            if( suma2 == tab_suma[ 1 ] ) indeksmin = i;
           
            if( suma2 == tab_suma[ 999 ] ) indeksmax = i;
           
            suma2 = 0;
           
        }
        System.out.println( "Liczba o największej sumie cyfr to: " + tab_cyfry[ indeksmin ] );
        System.out.println( "Liczba o najmniejszej sumie cyfr to: " + tab_cyfry[ indeksmax ] );
        //
        System.out.println( "--------------------------------C---------------------------------" );
        // Znów musimy rozdzielić nasze liczby na części pierwsze
        int[] f = new int[ 1000 ];
        int digit3;
        int[][] liczby = new int[ 1000 ][ 100 ];
        int k = 0;
        for( i = 0; i < 1000; i++ ) {
            f[ i ] = tab_cyfry[ i ];
            while( f[ i ] > 0 ) {
                digit3 = f[ i ] % 10;
                f[ i ] = f[ i ] / 10;
                liczby[ i ][ k ] = digit3;
                k++;
            }
            k = 0;
        }
       
       
        in.close();
    }
}

Plik:
http://wklejto.pl/144916Plik z cyframi na maturze[/a]
P-73426
DejaVu
» 2013-01-09 00:06:34
W skrócie
C/C++
if( liczba.dlugosc() < 2 )
     return true;

for( i = 1; i < liczba.dlugosc(); ++i )
if( liczba[ i - 1 ] >= liczba[ i ] )
     return false;

return true;
P-73428
krzysiekkcn
Temat założony przez niniejszego użytkownika
» 2013-01-09 16:44:29
Dzieki wielkie
P-73464
« 1 »
  Strona 1 z 1