Fascinerende nummer i Java
I dette indlæg vil vi udvikle et Java-program for at kontrollere, om det givne nummer er et fascinerende nummer eller ej? Vi vil også udvikle et Java-program til at finde alle fascinerende tal mellem to givne tal.
Et tal kaldes et fascinerende tal, hvis det (med mindst 3 cifre) ganges med 2 og 3, og begge disse produkter er sammenkædet med det oprindelige tal, så indeholder det nye tal alle cifrene fra 1 til 9 nøjagtigt enkelt gang. Der kan være et hvilket som helst antal nuller og ignoreres.
Eksempel:-
Antal =192
Multiplikering med 2 => 192 * 2 =384
Multiplicering med 3 => 192 * 3 =576
Sammenkædning => "192" + "384" + "576" =192384576, hvilket indeholder alle cifrene fra 1 til 9 præcis én gang. Derfor er det et fascinerende tal.
Da 192 er et fascinerende tal, så er 1902, 19002, 19000...0002 også et fascinerende tal. Fordi antallet af 0 ignoreres.
Et andet eksempel:-
Antal =273
Multiplicering med 2 => 273 * 2 =546
Multiplicering med 3 => 273 * 3 =819
Sammenkædning => "273" + "546" + "819" ="273546819" , som indeholder alle cifrene fra 1 til 9 præcis én gang. Derfor er det et fascinerende tal.
Procedure
1) Tag et tal
2) Erklær en streng og initialiser den med sammenkædningen af tal, tal*2 og tal*3. Til sammenkædning kan vi bruge + operator
String str = "" + number + number*2 + number*3;
3) Angiv en heltalsmatrix med størrelse 10, som standard er alle elementer i en matrix 0
4) Gå gennem strengens tegn.
- Find det ith-tegn i iterationen
- Konverter dette tegn til ciffer (Ikke i ASCII-værdi) og
- Tjek array[ciffer] er 0 eller ej? Hvis ja, så øg værdien af array[digit]-elementet med 1. Men hvis array[digit] ikke er 0, betyder det, at det allerede er øget på grund af tidligere eksisterende samme ciffer, så tal er ikke et fascinerende tal.
If( arr[digit] == 0 ) arr[digit]++;
else return false;
5) Tjek nu det manglende ciffer, ignorer element=0. Hvis et element i arrayet er nul, betyder det, at streng (nummer) ikke indeholder det tal. Så tallet er ikke et fascinerende tal.
6) Hvis alle tidligere betingelser er opfyldt, er det et fascinerende tal.
Program
import java.util.Scanner;
public class FascinatingNumber {
// Method to check the Fascinating number
public static boolean isFascinating(int number){
// declare variables
int digit = 0;
// new number
String str = "" + number +
number*2 + number*3;
// declare an array of size 10
int arr[] = new int[10];
// compare array elements and
// characters of the string
for(int i=0; i<str.length(); i++) {
// fetch ith character and
// convert it into number
digit = str.charAt(i) - '0';
// check arr[digit] element
// and ignore 0
if(digit==0 || arr[digit]==0)
arr[digit]++;
else return false;
}
// check their is any
// missing number.
// Ignore 1st element (0) of array
for(int i=1; i<arr.length; i++) {
// digit i was not their in String
if(arr[i]==0)
return false;
}
// all conditions satisfied so, return true
return true;
}
// main method
public static void main(String[] args) {
// declare variables
int number = 0;
boolean result = false;
//create Scanner class object to take input
Scanner scan = new Scanner(System.in);
// take input from end-user
System.out.print("Enter an integer number::");
number = scan.nextInt();
// check number is Fascinating number or not
result = isFascinating(number);
// display
if(result)
System.out.println(number +
" is a Fascinating number.");
else
System.out.println(number +
" is not a Fascinating number.");
// close Scanner class object
scan.close();
}
}
Output for de forskellige test-cases er:-
Indtast et heltal::192
192 er et fascinerende tal.
Indtast et heltal::1902
1902 er et fascinerende tal.
Indtast et heltal::219
219 er et fascinerende tal.
Indtast et heltal::1234
1234 er ikke et fascinerende tal.
Java-program til at finde alle fascinerende tal mellem to tal
import java.util.Scanner;
public class FascinatingNumberInRange {
// method to check the Fascinating number
public static boolean isFascinating(int number) {
// declare variables
int digit = 0;
// new number
String str = "" + number + number*2 + number*3;
// declare an array of size 10
int arr[] = new int[10];
// compare array elements and
// characters of the string
for(int i=0; i<str.length(); i++) {
// fetch ith character and
// convert it into number
digit = str.charAt(i) - '0';
// check arr[digit] element
// and ignore 0
if(digit==0 || arr[digit]==0)
arr[digit]++;
else return false;
}
// check their is any
// missing number.
// Ignore 1st element (0) of array
for(int i=1; i<arr.length; i++) {
// digit i was not their in String
if(arr[i]==0)
return false;
}
// all conditions satisfied so, return true
return true;
}
public static void main(String[] args) {
// declare variables
int minRange = 0, maxRange = 0;
//create Scanner class object to take input
Scanner scan = new Scanner(System.in);
System.out.print("Enter minimum value of range:");
minRange = scan.nextInt();
System.out.print("Enter maximum value of range:");
maxRange = scan.nextInt();
System.out.println("The Fascinating number from "+
minRange + " to "+ maxRange+" are: ");
// loop
for(int i=minRange; i<=maxRange; i++) {
// check number
if(isFascinating(i))
System.out.print(i +" ");
}
// close Scanner class object
scan.close();
}
}
Output for de forskellige test-cases er:-
Indtast minimum
værdi af interval:1
Indtast maximum
værdi af område:1000
Det fascinerende tal fra 1 til 1000 er:192 219 273 327
Indtast minimum
værdi af interval:1000
Indtast maximum
værdi af interval:10000
Det fascinerende tal fra 1000 til 10000 er:1902 1920 2019 2190 2703 2730 3027 3270