Една задачка на Java
0 отговора
43 прегледа
Една задачка на Java
Реших да ви провокирам и да сложа една програмка, която е написана на изключително елементарен език(не претендирам за най-рационално решение). Тя открива броя на някакви числа в интервала от 10 до 9000000. Въпроса ми е какви са тези числа. Нарочно съм сложил еднобуквени променливи, за да не ви подсказват за какво става въпрос(въпреки че и еднобуквени, не всичките са избрани случайно
). Ако искате да си пуснете програмката, за да видите тези числа и броя им, имайте предвид, че процеса ще ви отнеме от 30сек. до 3мин.(в зависимост от бързината на компютъра ви; аз с нея си тествам настройките на компютъра - коя е "най-забързваща").Ако не ви се чака толкова много, можете да намалите броя на изпълненията в основния цикъл например на 2500000. Съревновават се клубове "Java", "Информатика" и "Програмисти". Е, успех.
--------------------------------------------------------------
package untitled2;
import ccj.*;
public class Zachislata {
public static void main(String []args) {
int o=0;
for (int g=10;g<=9000000;g++) {
int N=g,d=1,c=0,n=N,l=10,f=0,
ij=0,r=0;
while(d!=0){
d=N/10;
N=d;
c++;
}
N=n;
int[]m=new int[c];
int[]p=new int[c];
for(int i=0;i<=c-3;i++)
l*=10;
int l2=l/10;
for(int i=0;i<c;i++){
m=N/l;
N-=m*l;
l/=10;
}
l=l2*10;
N=n;
for(int i=0;i<=c-1;i++){
ij=0;
for(int j=0;j<c-1;j++){
if(j==i) ij++;
int gr=l2;
if(m[ij]==0) l2=0;
f+=m[ij]*l2;
l2=gr;
l2/=10;
ij++;
}
l2=l/10;
if(f!=0){
if((N%f)==0)
p=0;
else p=1;
}
else p=1;
f=0;
}
for(int w=0;w<=c-2;w++)
if(p[w]==0) r++;
if(r==(c-1)){
System.out.println(n);
o++;
}
}
System.out.println("Broia na chislata v interwala");
System.out.println("ot 10 do 9 000 000 e: "+o);
for(;;);
}
}
--------------------------------------------------------------
П.с.Ако искате подсказки - насреща съм.
Елементарно, драги ми Уотсън!
--------------------------------------------------------------
package untitled2;
import ccj.*;
public class Zachislata {
public static void main(String []args) {
int o=0;
for (int g=10;g<=9000000;g++) {
int N=g,d=1,c=0,n=N,l=10,f=0,
ij=0,r=0;
while(d!=0){
d=N/10;
N=d;
c++;
}
N=n;
int[]m=new int[c];
int[]p=new int[c];
for(int i=0;i<=c-3;i++)
l*=10;
int l2=l/10;
for(int i=0;i<c;i++){
m=N/l;
N-=m*l;
l/=10;
}
l=l2*10;
N=n;
for(int i=0;i<=c-1;i++){
ij=0;
for(int j=0;j<c-1;j++){
if(j==i) ij++;
int gr=l2;
if(m[ij]==0) l2=0;
f+=m[ij]*l2;
l2=gr;
l2/=10;
ij++;
}
l2=l/10;
if(f!=0){
if((N%f)==0)
p=0;
else p=1;
}
else p=1;
f=0;
}
for(int w=0;w<=c-2;w++)
if(p[w]==0) r++;
if(r==(c-1)){
System.out.println(n);
o++;
}
}
System.out.println("Broia na chislata v interwala");
System.out.println("ot 10 do 9 000 000 e: "+o);
for(;;);
}
}
--------------------------------------------------------------
П.с.Ако искате подсказки - насреща съм.
Елементарно, драги ми Уотсън!