0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
1

Создать массив из 12 случайных чисел таким образом, чтобы отрицательных и положительных было поровну

11.12.2015, 01:13. Показов 10724. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не хватает терпения хочут увидеть другие решения...
Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и
положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен
(т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел
или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2015, 01:13
Ответы с готовыми решениями:

Заполнить массив, чтобы в нем оказалось поровну отрицательных и положительных чисел
Доброго всем здравия, телесного и духовного. Два дня назад у кого-то было такое задание здесь или...

Преобразовать массив таким образом, чтобы в нем не было повторяющихся чисел
Создать и заполнить случайными числами два целочисленных массива. Преобразовать эти массивы таким...

создать стек в памяти из этих чисел таким образом, чтобы на вершине стека было самое большое число. Удалить из стека все отрицательные элементы.
Помогите решить. В файл записывается последовательность целых чисел. Прочитать последовательность...

Создать static таким образом, чтобы его цвет был таким же, как у окна
Нужно создать метку таким образом чтобы цвет метки был таким же как у окна. HWND hLabelFrom =...

29
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
11.12.2015, 01:21 2
Цитата Сообщение от Slavik1985 Посмотреть сообщение
другие решения
А "не другое" где?
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.12.2015, 03:06 3
Slavik1985,
1. Сгенерировать 6 положительных чисел и добавить их в массив
2. Сгенерировать 6 отрицательных чисел и добавить их в массив
3. Перемешать массив случайным образом (Collections.shuffle(array))
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 05:44 4
захотелось мне решить задачу без использования shuffle и других способов перемешивания массива и вот какая громоздкая конструкция получилась 0.о

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class New {
 
    public static void main(String[] args){
 
        Random random = new Random();
        int rand, quantPlus = 0, quantMinus = 0;
        ArrayList<Integer> arr = new ArrayList<>();
 
        do {
            //генерируем очередное число, если равно 0 генерируем заново
            do {
                rand = random.nextInt(21) - 10;
            } while (rand == 0);
 
            //добавляем в массив
            arr.add(rand);
 
            //считаем отрицательное или положительное
            if (rand > 0)
                quantPlus++;
            else quantMinus++;
 
            //все это делаем пока отрицательных или положительных не станет 6 штук
        } while (quantMinus != 6 && quantPlus != 6);
 
        //если отрицательных 6 штук, то остаток заполняем положительными
        if (quantMinus == 6){
            do {
                arr.add(random.nextInt(10) + 1);
            } while (arr.size() < 12);
        }
        //если отрицательных НЕ 6 штук, то значит положительных 6 штук и остаток заполняем отрицательными
        else {
            do {
                arr.add(random.nextInt(10) - 10);
            } while (arr.size() < 12);
        }
 
    }
}
Добавлено через 22 минуты
а вот в общем виде, где можно задать границы и размер массива

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class New {
 
    public static void main(String[] args){
 
        //нижняя и верхняя границы и размер массива
        int lowerLimit = -5, upperLimit = 7, sizeArr = 10;
        
        Random random = new Random();
        ArrayList<Integer> arr = new ArrayList<>();
        int rand, quantPlus = 0, quantMinus = 0;
        int interval = Math.abs(lowerLimit) + upperLimit;
 
        do {
            //генерируем очередное число, если равно 0 генерируем заново
            do {
                rand = random.nextInt(interval + 1) + lowerLimit;
            } while (rand == 0);
 
            //добавляем в массив
            arr.add(rand);
 
            //считаем отрицательное или положительное
            if (rand > 0) quantPlus++;
            else quantMinus++;
 
            //все это делаем пока отрицательных или положительных не станет половина
        } while (quantMinus != sizeArr/2 && quantPlus != sizeArr/2);
 
        //если отрицательных половина, то остаток заполняем положительными
        if (quantMinus == sizeArr/2){
            do {
                arr.add(random.nextInt(upperLimit) + 1);
            } while (arr.size() < sizeArr);
        }
        //если отрицательных НЕ половина, то значит положительных половина и остаток заполняем отрицательными
        else {
            do {
                arr.add(random.nextInt(Math.abs(lowerLimit)) + lowerLimit);
            } while (arr.size() < sizeArr);
        }
 
        quantMinus = quantPlus = 0;
        for (int i = 0; i < arr.size(); i++){
            if (arr.get(i) > 0) quantPlus++;
            else quantMinus++;
        }
 
        System.out.println(arr + " " + quantPlus + " " + quantMinus);
 
    }
}
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
11.12.2015, 16:35 5
chalenge accepted
мой вариант
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Arrays;
import java.util.Random;
 
public class Massiv {
 
    final static Random r = new Random();
 
    public static void main(String[] args) {
        int[] arr = makeArray(12);
        System.out.println(Arrays.toString(arr));
    }
 
    static int[] makeArray(int size) {
        int half = size / 2;
        int[] arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = r.nextInt(10) + 1;
            if (i < half) arr[i] *= -1;
        }
        shuffleArray(arr);
        return arr;
    }
 
    static void shuffleArray(int[] arr) {
        for (int i = arr.length - 1; i > 0; i--) {
            int pos = r.nextInt(i + 1);
            int d = arr[pos];
            arr[pos] = arr[i];
            arr[i] = d;
        }
    }
}
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 17:49 6
интересно можно ли сделать без шафл встроенного или самодельного, но менее громоздко чем мой вариант
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
11.12.2015, 17:53 7
мне не нравится как в нем генерится число и проверка на ноль
к тому же там ArrayList, а по условию массив

да и честно говоря в код не вникал - выглядит неочень
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 18:12 8
а вот умножение на -1 подсказало еще вариант без шафла:
- генерим 12 чисел от 1 до 10 и пихаем в массив
- случайным образом выбираем оттуда одно число
-- если оно положительное, то умножаем на -1 и в счетчик отрицательных чисел записываем +1
-- если оно уже отрицательное (ну то есть в прошлый раз уже его выбирали и умножали на -1), то ничего не делаем
- когда счетчик отр чисел равен половине массива то стоп, получаем массив какой нужно и без шафла

просто частенько встречаются всякие задачки типа сделайте то или се не прибегая к тем или иным средствам, не знаю насколько они полезны для мозга, но думать над ними интересно)
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
11.12.2015, 18:23 9
- я и сделал все без Collections, ну не считая вывода на консоль
- нет циклов, которые могут давать холостые проходы
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 18:31 10
"без шафл встроенного или самодельного"
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
11.12.2015, 18:35 11
что за дурацкое условие?
а почему не "без циклов и генератора случайных чисел" ?
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 18:40 12
ну хз насколько оно в принципе дурацкое, встречал задачи сделать что нибудь без if например
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.12.2015, 18:45 13
Цитата Сообщение от sskdroid Посмотреть сообщение
интересно можно ли сделать без шафл встроенного или самодельного, но менее громоздко чем мой вариант
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Arrays;
import java.util.Random;
 
public class Programm {
    private static final int[] numbersInRangeArray = {1,2,3,4,5,6,7,8,9,10};
    
    public static void main(String[] args) {
        int[] array = generateRandomArray(12);
        System.out.println(Arrays.toString(array));
    }
    private static int[] generateRandomArray(int size) {
        Random rnd = new Random();
        int[] resultArray = new int[size];
        for(int i=0; i<size; i++) {
            resultArray[i] = getRandomElement(numbersInRangeArray, rnd.nextInt() % 2 == 0 ? 1 : -1);
        }
        return resultArray;
    }
    private static int getRandomElement(int[] targetArray, int multipleFactor) {
        return multipleFactor * targetArray[(int)(Math.random() * (targetArray.length-1))];
    }
}
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 18:45 14
"Напишите метод, находящий максимальное из двух чисел, не используя операторы if-else или любые другие операторы сравнения"
видимо это как то развивает программерское воображение)
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.12.2015, 18:49 15
UPD незаметил про условие что элементов поровну. Решение неверное
0
9 / 9 / 3
Регистрация: 03.03.2015
Сообщений: 78
11.12.2015, 18:49 16
KEKCoGEN, не работает.
вот пример вывода там 7 отрицательных
[6, 1, -7, 8, 2, -2, -4, -4, 8, -6, -5, -9]
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.12.2015, 19:19 17
sskdroid, см. сообщение - апдейт

Добавлено через 3 минуты
Без шаффла получается довольно громоздко.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.util.Arrays;
import java.util.Random;
 
public class Programm {
 
    private static final int DELETED_CELL = -666;
 
    public static void main(String[] args) {
        int[] array = generateRandomArray(12);
        System.out.println(Arrays.toString(array));
    }
 
    private static int[] generateRandomArray(int size) {
        Random rnd = new Random();
        int[] positives = generateInRage(1, 10, size/2);
        int[] negatives = generateInRage(-10, -1, size/2);
        int[] resultArray = new int[size];
        int[] currentRepository = null;
        int currentIndex = 0;
 
        do{
            currentRepository = rnd.nextInt() % 2 == 0 ? positives : negatives;
            if(canPull(currentRepository)) {
                resultArray[currentIndex++] = pullFromRepository(currentRepository);
            }
        }while(!isComplete(resultArray));
        
        return resultArray;
    }
 
    private static boolean isComplete(int[] targetArray) {
        for (int number : targetArray) {
            if(number == 0) {
                return false;
            }
        }
        return true;
    }
 
    private static boolean canPull(int[] repoArray) {
        for(int i=0; i<repoArray.length; i++) {
            if(repoArray[i] != DELETED_CELL) {
                return true;
            }
        }
        return false;
    }
 
    private static int pullFromRepository(int[] repoArray) {
        int resultNumber = 0;
        for(int i=0; i < repoArray.length; i++) {
            if(repoArray[i] != DELETED_CELL) {
                resultNumber = repoArray[i];
                repoArray[i] = DELETED_CELL;
                return resultNumber;
            }
        }
        throw new RuntimeException("Should not get here");
    }
 
    private static int[] generateInRage(int min, int max, int size) {
        int[] resultArray = new int[size];
        for (int i = 0; i < size ; i++) {
            resultArray[i] = (int) (Math.random() * (max - min) + min);
        }
        return resultArray;
    }
}
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
11.12.2015, 19:30 18
Лучший ответ Сообщение было отмечено KEKCoGEN как решение

Решение

без шаффла
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Massiv {
 
    private final static Random r = new Random();
    private final static int SIZE = 12;
 
    public static void main(String[] args) {
        int[] arr = makeArray(SIZE);
        System.out.println(Arrays.toString(arr));
    }
 
    static int[] makeArray(int size) {
        int[] arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = r.nextInt(10) + 1;
        }
        invertSomeValues(arr);
        return arr;
    }
 
    private static void invertSomeValues(int[] arr) {
        int half = SIZE / 2;
        while (half > 0) {
            int pos = r.nextInt(SIZE);
            if (arr[pos] > 0) {
                arr[pos] *= -1;
                half--;
            }
        }
    }
}
1
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
11.12.2015, 22:26 19
Ладно, раз уж так тема развилась, добавлю и свои "пять копеек" (конструктивные комментарии и критика принимаются с благодарностью):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class SixAndSix {
 
    public static void main(String[] args) {
        int[] finish = runner();
        System.out.println(Arrays.toString(finish));
    }
 
    public static int[] runner() {
        int a = 62;
        int[] uno = pusk(a);
        for (int i = 0; i < a; i++) {
            if (uno[i] == 0) {
                uno[i] = (int) -(Math.random() * 50 + 1);
            }
        }
        return uno;
    }
 
    public static int[] pusk(int n) {
        int count = n / 2;
        int[] duo = new int[n];
        while (count > 0) {
            int q = (int) (Math.random() * n);       //случайные позиции
            duo[q] = (int) (Math.random() * 50 + 1); //заполним всякой чешуёй
            count = n / 2;
            for (int i = 0; i < n; i++) { //посчитаем сколько ненулевых элементов
                if (duo[i] != 0) {
                    count--;
                }
            }
        }
        return duo;
    }
}
Работает при любой разумной величине переменной "а" (сейчас стоит, для примера, 62), но в случае нечётного значения отрицательных чисел будет больше.
0
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
20.12.2015, 15:42  [ТС] 20
у меня такой вариант и не работает почему-то зараза) я пока что простими путями так как только начинаю
учится
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package less5;
 
public class Vk1 {
 
    static int rand1() {
        int c = (int) (Math.random() * 10 - 11);
        do {
            return c;
        } while (c != 0);
        // minus
        // return (int) (Math.random()*10-10);
    }
 
    static int rand2() {
        int l = (int) (Math.random() * (-10) + 11);
        do {
            return l;
        } while (l != 0);
    }
 
    // plus
 
    static double r3() {
        return Math.random();
    }
 
    static int[] rt(int s) {
        int a[] = new int[s];
        for (int i = 0; i < s/2; i++) {if(r3()<=.5&r3()>0){a[i] = rand1();}else{a[i] = rand2();}}
        for (int i = s/2; i < s; i++) {if(r3()>.5&r3()<=1){a[i] = rand2();}else{a[i] = rand1();}}
        return a;
    }
    public static void main(String[] args) {
        System.out.println();
 
        int f[] = rt(12);
        for (int i : f) {
            System.out.print(" " + i + "");
        }
    }
}
/*
 * . Программа должна создать массив из 12
 * случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных
 * и положительных элементов там было поровну и не было нулей. При этом порядок
 * следования элементов должен быть случаен (т. е. не подходит вариант, когда в
 * массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных
 * чисел или же когда элементы постоянно чередуются через один и пр.). Вывести
 * полученный массив на экран.
 */
0
20.12.2015, 15:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 15:42
Помогаю со студенческими работами здесь

Одномерные массивы. Добавить столько элементов, чтобы положительных и отрицательных стало поровну
Задача почти решена. Но вот никак не понять, как вывести изменённый массив, то есть, как сделать,...

Организовать одномерный массив из случайных положительных и отрицательных чисел
Буду очень признателен. Спасибо. Запрещено выкладывать задания в виде изображений текста. Одно...

Преобразуйте файл таким образом, чтобы каждое предложение было в новой строке
2. Дан текстовый файл, содержащий не менее 3-х предложений. Преобразуйте его таким образом, чтобы...

Преобразовать текст таким образом, чтобы в каждом абзаце было по три предложения
функция принимает строку, содержащую текст, и преобразует ее таким образом чтобы в каждом абзаце...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru