Може ли хелп за тези задачи на Java PB - 06 - 10?
Здравейте, затруднявам се да ги направя тези задачи
06. Equal Sums Left Right Position
07. Sum Prime Non Prime
10. Party Invitation
от тези тестове: https://judge.softuni.bg/Contests/Compete/Index/1165#6
Ето условията:
06. Еднакви суми на леви и десни позиции
Напишете програма, която чете от конзолата две петцифрени цели числа в диапазона от 10000 до 99999. Първото число винаги ще бъде по-малко от второто. Да се намерят и отпечатат на конзолата, разделени с интервал, онези числа, които се намират между прочетените от конзолата числа и отговарят на следните условия:
- сумите от двете най-десни и двете най-леви цифри на проверяваното число да са равни
- ако сумите са различни към по-малката от тях се прибавя средната цифра, на проверяваното число и получената нова сума се сравнява с другата сума. Ако те са равни числото се отпечатва.
Ако няма числа, отговарящи на условията на конзолата не се извежда резултат.
Примерен вход и изход
Вход |
Изход |
Обяснения |
|||
10000 10100 |
10001 10010 10100 |
Първото генерирано число за проверка е 10000. Разделяме числото на 3 групи - двете най- десни цифри, двете най- леви и средната. Сумата на двете най- десни цифри е 0+0=0, а тази на двете най- -леви 0+1=1. Тъй като сумата на десните цифри е по-малка от сумата на левите към нея прибавяме средната цифра 0+0=0. Получаваме 0. Сравняваме новополучената сума със сумата на левите цифри. Те не са равни, числото не отговаря на условието и не се отпечатва. Следващото число за проверка е 10001. Сумата на десните цифри е 1+0=1, а на левите 0+1=1. Двете суми са равни и не е нужно да извършваме някакви действия със средната цифра. Числото се отпечатва на конзолата. Следващото число е 10002. Не отговаря на условията и не се отпечатва. …… Последното число за проверка е 10100. Сумата на десните цифри е 0+0=0, на левите 0+1=1. Дясната сума е по-малка и затова към нея прибавяме средната цифра 0+1=1. Новополучената сума сравняваме със сумата на левите цифри. Двете суми са равни, числото отговаря на условията и се отпечатва. |
|||
Вход |
Изход |
Вход |
Изход |
Вход |
Изход |
12345 12666 |
12351 12360 12403 12407 12412 12416 12421 12425 12430 12434 12443 12452 12461 12470 12503 12508 12512 12517 12521 12526 12530 12535 12544 12553 12562 12571 12580 12603 12609 12612 12618 12621 12627 12630 12636 12645 12654 12663 |
99000 99199 |
99099 99189 99198 99199 |
19995 20000 |
|
07. Суми прости и непрости числа
Напишете програма, която чете от конзолата цели числа в диапазона от -2,147,483,648 до 2,147,483,647, докато не се получи команда "stop". Да се намери сумата на всички въведени прости и сумата на всички въведени непрости числа. Тъй като по дефиниция от математиката отрицателните числа не могат да бъдат прости, ако на входа се подаде отрицателно число да се изведе следното съобщение "Number is negative.". В този случай въведено число се игнорира и не се прибавя към нито една от двете суми, а програмата продължава своето изпълнение, очаквайки въвеждане на следващо число.
На изхода да се отпечатат на два реда двете намерени суми в следния формат:
"Sum of all prime numbers is: {prime numbers sum}"
"Sum of all non prime numbers is: {nonprime numbers sum}"
Примерен вход и изход
Вход |
Изход |
Обяснения |
|
3 9 0 7 19 4 stop |
Sum of all prime numbers is: 29 Sum of all non prime numbers is: 13 |
Първото въведено число е 3. То е просто и го прибавяме съм сумата на простите числа. Следващото число е 9. То не е просто и го прибавяме към сумата на непростите числа. Числото 0 не е просто число и го прибавяме към сумата на непростите числа. Сумата става 9+0=9. Следващите две числа са 7 и 19. Те са прости и всяко едно от тях го прибавяме към сумата на простите числа. 3+7=10 и 10+19=29. Следва числото 4, което не е просто и го прибавяме към съответната сума 9+4=13. Получаваме команда stop. Програмата прекъсва своето изпълнение и отпечатваме двете суми. |
|
Вход |
Изход |
Вход |
Изход |
30 83 33 -1 20 stop |
Number is negative. Sum of all prime numbers is: 83 Sum of all non prime numbers is: 83 |
0 -9 0 stop |
Number is negative. Sum of all prime numbers is: 0 Sum of all non prime numbers is: 0 |
10 .**Покана за парти
Алекс организира парти. Покана ще получат само тези, които напишат своето име валидно (едно име е валидно когато съдържа единствено букви от латинската азбука). Подаръкът Ви за Алекс е да напишете програма, която чете имена докато не се получи командата "Statistic" и изчислява процента на хората които ще дойдат, и на тези които няма да дойдат на партито. Също така трябва да се погрижите всяко едно валидно име да бъде изписано в правилният формат - с първа главна буква и всяка следваща малка.
От конзолата се четат поредица от стрингове, всеки на отделен ред.
След всяко едно прочетено трябва да се отпечата:
- Ако името НЕ e валидно: "Invalid name."
- Ако името E валидно: "{Името във коректен формат}"
- Ако името започва с главна буква и всичко останали са малки, се печата без промени.
- Ако НЕ е в коректният формат, то трябва да се промени. Пример: "StoYAn" -> "Stoyan"
След получаване на командата "Statistic" да се отпечатат на конзолата 2 реда:
- Първи ред - "Valid names are {процентa на валидните имена}% from {броят на имената} names."
- Втори ред - "Invalid names are {процентa на невалидните имена}% from {броят на имената} names."
Процентите да са форматирани до втората цифра след десетичната запетая.
Примерен вход и изход
Вход |
Изход |
Обяснения |
|
Pesho Go6o iVaN *B0b1$ StAMaT Ivo Statistic |
Pesho Invalid name! Ivan Invalid name! Stamat Ivo Valid names are 66.67% from 6 names. Invalid names are 33.33% from 6 names. |
Pesho – валидно и форматирано име, остава без промяна. Go6o – 6 е невалиден символ за име. IvaN – е валидно име, но не е подходящ формат, затова го форматираме -> Ivan. *B0b1$ - името съдържа невалидни символи. StAMat – е валидно име, но не е в подходящ формат, затова го форматираме-> Stamat. Ivo – е валидно и форматирано име, остава без промяна. Брой въведени имена: 6 Невалидни: 2, което е 66.67% процента от 6 Валидни: 4, което е 33.33% процента от 6 |
|
Вход |
Изход |
Вход |
Изход |
@sen T0d0r Ka1oqn 100qn Statistic |
Invalid name! Invalid name! Invalid name! Invalid name! Valid names are 0.00% from 4 names. Invalid names are 100.00% from 4 names. |
hriSTO EmIl MaRiYa Statistic |
Hristo Emil Mariya Valid names are 100.00% from 3 names. Invalid names are 0.00% from 3 names. |
Задача 6.
Решение с loop. Горното решение няма да работи при променлива дължина на input.
import java.util.Scanner;
public class EqualSumsLeftRight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int f = Integer.parseInt(scanner.nextLine());
int s = Integer.parseInt(scanner.nextLine());
for (int i = f; i <= s; i++) {
int leftSum = 0;
int midSum = 0;
int rightSum = 0;
for (int k = 0; k <= Integer.toString(i).length() - 1; k++) {
int num = Integer.toString(i).charAt(k) - 48;
if (k <= 1) leftSum += num;
else if (k >= 3) rightSum += num;
else midSum += num;
}
if (leftSum == rightSum || ( Math.min(leftSum, rightSum) + midSum == Math.max(leftSum,rightSum))) {
System.out.printf("%d ", i);
}
}
}
}
Задача 7.
Обърни вниманиен числото 1. Бях го проспал и резултата беше 90/100.
import java.util.Scanner;
public class PrimeNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
int sumPrime = 0;
int sumNonprime = 0;
while (!"stop".equals(input)) {
int num = Integer.parseInt(input);
int count = 0;
for (int i = 2; i <= num/2; i++) {
if (num % i == 0) {
count++;
break;
}
}
if ( num < 0 ) {
System.out.println("Number is negative.");
} else if ( count > 0 || num == 1) {
sumNonprime+=num;
} else {
sumPrime+=num;
}
input = scanner.nextLine();
/* System.out.println(count);*/
}
System.out.printf("Sum of all prime numbers is: %d\n", sumPrime);
System.out.printf("Sum of all non prime numbers is: %d", sumNonprime);
}
}
Задача 10:
Това е което писахме на упражнението.
import java.util.Scanner;
public class PartyInvitation {
public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );
String input = scanner.nextLine();
int validCount = 0;
int inValidCount = 0;
int namesCount = 0;
while (!"Statistic".equals( input )) {
boolean valid = true;
namesCount++;
input = input.toLowerCase();
for (int i = 0; i < input.length(); i++) {
char symbol = input.charAt( i );
if (symbol < 97 || symbol > 122) {
valid = false;
}
}
if (valid) {
validCount++;
input = input.substring( 0,1 ).toUpperCase() + input.substring( 1 );
System.out.printf( "%s\n", input );
} else {
inValidCount++;
System.out.println("Invalid name!");
}
input = scanner.nextLine();
}
System.out.printf( "Valid names are %.2f%% from %d names.\n", (validCount * 1.0 / namesCount) * 100, namesCount );
System.out.printf( "Invalid names are %.2f%% from %d names.\n", (inValidCount* 1.0 / namesCount) * 100, namesCount );
}
}
Започнах да правя 6та от кода на 5та, защото ми се стори, че си подхождат, но май съм в грешка. Благодаря ти за помоща и съветите :)