Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Многомерный массив / 25 сообщений из 34, страница 1 из 2
07.06.2014, 23:02
    #38664478
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Здравствуйте, уважаемые гуру!

Помогите, пожалуйста, понять и разобраться!
Есть некий квадратный двухмерный массив int`ов, его необходимо заполнить таким образом (песочные часы):

# # # # #
- # # # -
- - # - -
- # # # -
# # # # #

Наваял такой код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public static void main(String[] args) {
	int S = 5;
	char arr[][] = new char[S][S];
	
	for(int i = 0; i < S; i++) {
		for (int j = 0; j < S; j++) {
			if(i == 0 || i == S-1 || j == (S/2)) {
				arr[i][j] = '#';
			}
			else {
				arr[i][j] = '-';
			}
		}
	}		
	// Вывод массива
	for (int i = 0; i < arr.length; i++) {
		for (int j = 0; j < arr[i].length; j++) {
			System.out.print(arr[i][j] + " ");
		}
		System.out.println();
	}		
}



но он работает только наполовину (((...
Подскажите, пожалуйста, что я упустил?..
...
Рейтинг: 0 / 0
08.06.2014, 01:33
    #38664532
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123,

Алгоритм заполнения:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for (int i = 0; i <= arr.length / 2; i++) {
    for (int j = 0; j < i; j++) {
        arr[i][j] = arr[i][arr.length - j - 1] = '-';
        arr[arr.length - i - 1][j] = '-';
        arr[arr.length - i - 1][arr.length - j - 1] = '-';
    }
    for (int j = i; j < arr[i].length - i; j++) {
        arr[i][j] = arr[arr.length - i - 1][j] = '#';
    }
}

P.S.
S должна быть всегда нечетной!
...
Рейтинг: 0 / 0
08.06.2014, 10:41
    #38664576
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Usman ,
огромное вам спасибо! Все работает! И теперь я вижу, как это работает, хотя изначально алгоритмически я представлял иначе, что оказалось неправильным...
...
Рейтинг: 0 / 0
08.06.2014, 18:56
    #38664700
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Как вариант через арифм. прогрессию:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
		int S = 31;
		char arr[][] = new char[S][S];
				
		for(int i = 0, t = 0; i < S; i++) {
			if(i == S/2) t = 1;
			int bn = Math.abs(S-2+(-2)*(i-t));
			for(int j = 0; j < S; j++){
				if(i != S/2 && j>=(S-bn)/2 && j<(S-bn)/2+bn) arr[j][i] = '-';
				else arr[j][i] = '#';
			}
		}		
		
		
		// Вывод массива
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}



Хотел сделать вообще секси, но там в самой середине ряд из # помешал (пришлось вводить t) и Array.fill не заполняет по вертикали ((.
...
Рейтинг: 0 / 0
08.06.2014, 18:59
    #38664703
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
PS Работает и с четными, но тогда в середине не один стобик из # а два.
...
Рейтинг: 0 / 0
08.06.2014, 19:43
    #38664721
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
no56892,
Код: java
1.
2.
3.
4.
  for(int i = 0; i < S; i++) 
    for(int j = 0; j < S; j++)
      if(i != S/2 && j>=(S-Math.abs(S-2+(-2)*(i-((i >= S/2)?1:0))))/2 && j<(S-Math.abs(S-2+(-2)*(i-((i >= S/2)?1:0))))/2+Math.abs(S-2+(-2)*(i-((i >= S/2)?1:0)))) arr[j][i] = '-';
      else arr[j][i] = '#';	


Лайфхак-инлайн, 4 строчки)
...
Рейтинг: 0 / 0
08.06.2014, 23:28
    #38664826
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Давайте более интересные начальные условия. Фигура с центральной симметрией.
Код: java
1.
2.
3.
4.
5.
# # # - -
- # # - -
- - # - -
- - # # -
- - # # #
...
Рейтинг: 0 / 0
08.06.2014, 23:28
    #38664827
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
no56892 ,

Спасибище огромное! Все варианты супер! ))) Буду курить яву дальше! :D
...
Рейтинг: 0 / 0
09.06.2014, 00:13
    #38664831
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
maytonДавайте более интересные начальные условия.

Нивапрос! ))))
Написал такой код по поиску чисел в массиве:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
int arr[] = new int[20];
Random rand = new Random();
for(int i = 0; i < arr.length; i++) {
	arr[i] = rand.nextInt(100000);
}

int a = 0;
for(int i = 0; i < arr.length; i++) {
	if(a < arr[i]) a = arr[i];
	System.out.println("[" + i + "] - " + arr[i]);
}
System.out.println(a + " - максимальное число");


Самое большое значение среди элементов нахожу, но как правильно найти 2-й, 3-й и т.д. по величине элемент в массиве + наиболее повторяющийся (если есть) + самую длинную последовательность чисел среди элементов? И возможно ли это единой итерацией?
...
Рейтинг: 0 / 0
09.06.2014, 00:52
    #38664840
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
no56892,
Одной строчкой:
Код: java
1.
for(int i=0;i<S;i++)for(int j=0;j<S;j++)arr[j][i]=(i!=S/2&&j>=(S-Math.abs(S-2+(-2)*(i-((i>=S/2)?1:0))))/2&&j<(S-Math.abs(S-2+(-2)*(i-((i>=S/2)?1:0))))/2+Math.abs(S-2+(-2)*(i-((i>= S/2)?1:0)))==true)?'-':'#';


Эстетическое чуство полностью удовлетворено.
...
Рейтинг: 0 / 0
09.06.2014, 01:35
    #38664853
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123,

Модификации:16138080 )
- Заполняем исключительно решетками;
- S может быть как четной, так и нечетной:
Код: java
1.
2.
3.
4.
5.
for (int i = 0; i < S / 2.; i++) {
    for (int j = i; j < S / 2.; j++) {
        arr[i][j] = arr[i][S - j - 1] = arr[S - i - 1][j] = arr[S - i - 1][S - j - 1] = '#';
    }
}

- Замена на '-' при выводе на экран:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// Вывод массива
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        if (arr[i][j] == 0) {
            arr[i][j] = '-';
        }
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}
...
Рейтинг: 0 / 0
09.06.2014, 20:35
    #38665701
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Usman , no56892 ,

спасибо вам большущее за все предложенные варианты! Ваши первые версии то, что нужно! Спасибо!
...
Рейтинг: 0 / 0
09.06.2014, 20:39
    #38665703
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
и быть может, кто-нибудь из вас знает хотя бы приблизительно, как можно сделать 16139842 ?..
...
Рейтинг: 0 / 0
09.06.2014, 20:58
    #38665713
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123и быть может, кто-нибудь из вас знает хотя бы приблизительно, как можно сделать 16139842 ?..
Код: java
1.
2.
3.
4.
5.
for (int i = 0; i < S / 2.; i++) {
    for (int j = i; j < S / 2.; j++) {
        arr[i][j] = arr[S - i - 1][S - j - 1] = '#';
    }
}		
...
Рейтинг: 0 / 0
09.06.2014, 23:04
    #38665749
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Usman ,

не совсем вас понял...
...
Рейтинг: 0 / 0
10.06.2014, 00:47
    #38665789
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
no56892, давай на Scala ато незачот.
...
Рейтинг: 0 / 0
10.06.2014, 02:31
    #38665808
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123 Usman ,

не совсем вас понял...Это решение к 16139748 :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
###########----------
-##########----------
--#########----------
---########----------
----#######----------
-----######----------
------#####----------
-------####----------
--------###----------
---------##----------
----------#----------
----------##---------
----------###--------
----------####-------
----------#####------
----------######-----
----------#######----
----------########---
----------#########--
----------##########-
----------###########
...
Рейтинг: 0 / 0
10.06.2014, 04:09
    #38665835
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123Самое большое значение среди элементов нахожу, но как правильно найти 2-й, 3-й и т.д. по величине элемент в массивеВаше решение - подходящее стандартное решение. Претензий нет.
beginner123наиболее повторяющийся (если есть)А если их несколько? Достаточно ли будет вывести (максимальное) число повторений?
beginner123самую длинную последовательность чисел среди элементовС выводом подпоследовательности? Или достаточно вывести ее длину?
И как на счет использования сортировок (т.е. порядок элементов играет роль)?
...
Рейтинг: 0 / 0
11.06.2014, 00:56
    #38667010
beginner123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Usman , вы подали правильную идею - отсортировать массив. Так и сделал. Теперь у меня гарантированно есть максимальный и минимальный элементы, и, теоретически 2-й и 3-й элементы, если они не повторяются...

UsmanА если одинаковых чисел несколько? Достаточно ли будет вывести (максимальное) число повторений?
...вот поэтому и есть необходимость в проверке на совпадения. Да, нужно вывести значение с количеством повторений.

UsmanС выводом подпоследовательности? Или достаточно вывести ее длину?
достаточно вывести ее длину.
...
Рейтинг: 0 / 0
11.06.2014, 03:15
    #38667044
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
beginner123UsmanС выводом подпоследовательности? Или достаточно вывести ее длину?
достаточно вывести ее длину.После сортировки весь массив превращается в длинную непрерывную (под-)последовательность.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static void main(String[] args) {
    java.util.SortedMap<Integer, Integer> map = new java.util.TreeMap<>();
    java.util.Random rand = new java.util.Random();
    int maxVal = 0;
    for(int i = 0, num, count; i < 20; i++) { // 20 - число итераций (элементов)
        num = rand.nextInt(10);
        count = 1 + (map.containsKey(num) ? map.get(num): 0);
        map.put(num, count);
        if (count > maxVal) maxVal = count;
    }
    int min = map.firstKey();
    int max = map.lastKey();
    
    System.out.println(map);
    System.out.println(min + " - минимальное число");       
    System.out.println(max + " - максимальное число");      
    System.out.println(maxVal + " - максимальное число повторений");
}
...
Рейтинг: 0 / 0
11.06.2014, 17:38
    #38667954
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
А ну-кося.... Хто запилит вот такой вот формул?



А я потом своё решение подкину... Может быть.... Если осилю
...
Рейтинг: 0 / 0
11.06.2014, 18:41
    #38668035
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
mayton,

Вот такой быдлокод :)

Код: java
1.
2.
3.
4.
5.
double e = 10000;
for(int n = 10000; n >= 1; --n) {
	e = n + n / e;
}
e = 2 + 1 / e;
...
Рейтинг: 0 / 0
11.06.2014, 18:44
    #38668037
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
А почему десять тыщ? И можно-ли цикл развернуть?
...
Рейтинг: 0 / 0
11.06.2014, 18:45
    #38668041
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
maytonА почему десять тыщ? И можно-ли цикл развернуть?
в бесконечность?
...
Рейтинг: 0 / 0
11.06.2014, 18:52
    #38668049
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Майн гот! А интересно как-там погрешность считать?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Многомерный массив / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]