トライフォース型
Re: トライフォース型
その作成できたプログラムを見せてください。spitz さんが書きました: ↑4年前x=2だけであれば作成できるのですが
また、x = 3、x = 4 の場合の期待する結果を提示してください。
私は次のように考えたのですが、これでは、
x = 2 のとき 底辺3、斜辺2 の二等辺三角形 3個
x = 3 のとき 底辺5、斜辺3 の二等辺三角形 3個
x = 4 のとき 底辺7、斜辺4 の二等辺三角形 3個
となって、辺 x の二等辺三角形 x個積み重ねるようにはなっていません。
Re: トライフォース型
x=2のときだけしか考えていなく一般化できてないですが、このようなプログラムを作りました。
理想としているのはこのようなものです。
二等辺三角形を図のようにx段積みあげるという意味でした。説明が下手で申し訳ないです。
#include<stdio.h>
int main(void){
int n,i,j;
n=2;
for(i=1;i<=n;i++){
for(j=1;j<=n*n-i;j++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("*");
}
for(j=1;j<=n*n-i;j++){
printf(" ");
}
printf("\n");
}
for(i=1;i<=n;i++){
for(j=1;j<=n*n-n-i;j++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("*");
}
for(j=1;j<=2*(n-i+1)-1;j++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("*");
}
for(j=1;j<=n*n-n-i;j++){
printf(" ");
}
printf("\n");
}
return 0;
}
x=2
---*---
--***--
-*---*-
***-***
x=3
--------*--------
-------***-------
------*****------
-----*-----*-----
----***---***----
---*****-*****---
--*-----*-----*--
-***---***---***-
*****-*****-*****
x=4
---------------*---------------
--------------***--------------
-------------*****-------------
------------*******------------
-----------*-------*-----------
----------***-----***----------
---------*****---*****---------
--------*******-*******--------
-------*-------*-------*-------
------***-----***-----***------
-----*****---*****---*****-----
----*******-*******-*******----
---*-------*-------*-------*---
--***-----***-----***-----***--
-*****---*****---*****---*****-
*******-*******-*******-*******
Re: トライフォース型
規則正しいものは、適当な変数を用意して繰り返せばできます。
#include <stdio.h>
void plot(int c, int n) { while (--n >= 0) putchar(c); }
void draw(int x)
{
int n = 0, i = 1, k = 0, s = x*x;
while (--s >= 0) {
plot('_', s), plot('*', i);
for (int j = 0; j < k; j++) plot('_', x*2 - i), plot('*', i);
plot('_', s), putchar('\n');
i += 2;
if (++n == x) n = 0, i = 1, k++;
}
}
int main(void)
{
for (int x = 2; x <= 4; x++) printf("\nx = %d\n", x), draw(x);
}
Re: トライフォース型
plot を draw の中に入れ、draw を main の中に入れるだけじゃないですか。spitz さんが書きました: ↑4年前すみません。main()関数のみでのプログラム作成になります。
#include <stdio.h>
int main(void)
{
for (int x = 2; x <= 4; x++) {
printf("\nx = %d\n", x);
int n = 0, i = 1, k = 0, s = x*x, m, j;
while (--s >= 0) {
for (m = s; --m >= 0; ) putchar('_');
for (m = i; --m >= 0; ) putchar('*');
for (j = k; --j >= 0; ) {
for (m = x*2-i; --m >= 0; ) putchar('_');
for (m = i; --m >= 0; ) putchar('*');
}
for (m = s; --m >= 0; ) putchar('_');
putchar('\n');
i += 2;
if (++n == x) n = 0, i = 1, k++;
}
}
}
Re: トライフォース型
ループの中に if文があるのが気に食わないので書き直してみました。
解は一つではありません。いろいろな解答を考えてみましょう。
#include <stdio.h>
void plot(int c, int n) { while (--n >= 0) putchar(c); }
void draw(int x)
{
int s = x*x, t = x*2, i, j, k;
for (i = 0; i < x; i++)
for (j = 1; j < t; j += 2) {
plot('.', --s), plot('*', j);
for (k = i; --k >= 0; ) plot('.', t-j), plot('*', j);
plot('.', s), putchar('\n');
}
}
int main(void)
{
for (int x = 2; x <= 4; x++) printf("\n x = %d\n", x), draw(x);
}
Re: トライフォース型
「*」を打たないところがスペースでよければ、printf が使えます。
#include <stdio.h>
int main(void)
{
static char a[] = "*************************************************";
for (int x = 2; x <= 4; x++) {
printf("\n x = %d\n", x);
for (int s = x*x, t = x*2, i = 0; i < x; i++)
for (int j = 1; j < t; j += 2) {
printf("%*.*s", --s + j, j, a);
for (int k = i; --k >= 0; ) printf("%*.*s", t, j, a);
putchar('\n');
}
}
}