Как мне сгенерировать обратный ромб из одного числа? - PullRequest
1 голос
/ 03 февраля 2011

Итак, у моего друга было интересное домашнее задание. Ее задачей было создать бриллиант на основе пользовательского ввода. Образец алмаза на основе ввода ( 5 ):

************
*****  *****
****    ****
***      ***
**        **
*----------*
**        **
***      ***
****    ****
*****  *****
************

Не слишком сложно использовать вложенные циклы или рекурсию, как вам нравится.

Как вызов самому себе, я решил решить его с некоторыми дополнительными критериями:

  • Разрешено использовать только 1 цикл
  • Не разрешается использовать любые переменные, кроме входных данных и индекса вашего цикла

Я прошел 2/3 пути, но я знаю, что я просто вслепую прощупываю и хотел бы действительно понять решение.

Это немного похоже на этот Алмазный паттерн , но в их коде используются все конструкции, которых я пытаюсь избежать.

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

Вот куда я дошел:

******
*****
****
***
**
*
**
***
****
*****
******

С этим кодом:

<script type="text/javascript">
for(x=1;x<=(lines*2+2)*lines*2+(lines*2+2);x++) {
    if( ((x-1)%(lines*2+2)) <= Math.floor(((Math.abs(( (x-1)/(lines*2+2))%(lines*2+2) -lines)-0.51)+1)) ) {
        document.write("*");
    }
    if((x%(lines*2+2))==0) { document.write("\n"); }
}
</script>

Любая помощь приветствуется. Спасибо!

Edit:

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

Там имеет , чтобы иметь какое-то математическое соотношение между номером строки и номером столбца, которое можно использовать.

Ответы [ 4 ]

2 голосов
/ 03 февраля 2011

Возможно, вам придется немного его настроить, но это довольно хорошо работает, используя Array.join

http://jsfiddle.net/8H27C/

2 голосов
/ 03 февраля 2011

Этот подход не объявляет переменные и дает правильный вывод:

<code><html>
<head>
<title>Diamond</title>
</head>
<body>
<pre><script>
    var input = 5;
    for(var i = -input; i <= input; i++){
        document.write((new Array(Math.abs(i) + 2).join("*")) + 
          (new Array((input - Math.abs(i)) * 2 + 1).join(i ? ' ' : '-')) + 
          (new Array(Math.abs(i) + 2).join("*")) + "\n");
    }

</script>

Вывод:

************
*****  *****
****    ****
***      ***
**        **
*----------*
**        **
***      ***
****    ****
*****  *****
************
1 голос
/ 13 февраля 2011

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

0 голосов
/ 03 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...