아주 간단한 C++ 퀴즈 하나

kkb110의 이미지

갑자기 옛날에 봤던 문제가 생각나서 올려봅니다.

정말 간단하고 쉬운 문제인데요,

아마 제가 알고있는 답보다 재밌는 답이 많이 나올 수 있을 것 같습니다 ㅎㅎ

보통 처음 C++을 시작하고 for구분을 배우면 짜게되는 대표적인 코드가 삼각형 별표출력코드인데요

for(int i=0; i < n; ++i)
{
  for(int j=0; j <= i; ++j)
  {
    cout << '*';
  }
  cout << '\n';
}

*
**
***
****

뭐 대충 이런식이 되겠지요

문제는..
위 2중 루프를 루프 하나로 줄이는것입니다.

특별한 제한은 없긴한데 루프내부에서 함수호출해서 그함수에서 루프돌거나 실질적 루프인 재귀함수.. 그런건 무효입니다 -_-;
아무튼 자기가 작성하는 코드에 루프가 하나만 들어가면 됩니다.

재밌는 답 많이 보여주세요~~ ㅎㅎ

Scarecrow의 이미지

for(int i = 0; i < 1; ++i) {
	cout << "*\n**\n***\n****" << endl;
}

=3==3=======3
snowall의 이미지

근데 이렇게 짜면 루프 없게도 짤 수 있지 않나요? -_-;;

--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

d3m3vilurr의 이미지

1개 있어야 하는게 제한사항이니까요(...)

madman93의 이미지

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

Scarecrow의 이미지

for(int i=0, j=0; i < n;) {
  if(j <= i)   {
    cout << '*';
    ++j;
  } else {
    cout << '\n';
    ++i; j=0;
  }
}

http://kldp.org/node/99994

hshenry의 이미지

c언어를 몰라서 할줄 모르는 1인

snowall의 이미지

string a("*")
for(i=0;i<n;++i){
cout << a;
cout << "\n";
a.append("*");
}

대충 이렇게 하면 될까요...
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

esrevinu의 이미지

  for (int i = 1, j = 1; i <= N; j++) {
      cout << "*";
      if (2*j == i*(i+1)) {
        i++;
        cout << "\n";
      }
  }
paradox의 이미지

while(i < n){
j[i]='*';
cout << j << '\n';
i++;
};

for 루프여야만 된다면...

for(i=0; i < n; i++){
j[i]='*';
cout << j << '\n';
}
JuEUS-U의 이미지

선언시에 0으로 초기화된다는 전제가 필요하군요 =ㅅ=);

kmryu의 이미지

char *s = "**********";
int i;
 
for(i = 0; i < 10; i++)
    printf("%s\n", s + i);
kmryu의 이미지

위에껀 뒤집는거고.. 이번껀 바로..

for(i = 0; i < 10; i++)
    printf("%s\n", (s + 10 - 1) - i);
Fe.head의 이미지

    char stars[] = "**************************************";
 
    for( int i = 0 ; i <= 4 ; ++i ) {
        write( 1, stars, i );
        cout << endl;
    }
    return 0;

string::append 쓰신분이 가장 최고인듯

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

kkb110의 이미지

우와~ 솔루션 종류가 이렇게 많이 나올줄은 몰랐어요~!
제가 알고있던거랑 같은거 쓰신분도 벌써있고 ㅎㅎ
등차수열 쓰신분 센스 완전 짱이신데요 ㅎㅎ
이거 올린지 얼마나됬다구..
이거 완전 루프 없이 하라그래도 다 하실 기센데요? ㄷㄷㄷ (은근슬쩍 업그레이드===3=3=3=3=33)
아.. 이건 불가능한가 -_-;;

kkb110의 이미지

.

kdh0404의 이미지

int i;
char str[11] = {'\0', };
for(i=0; i<10; i++) {
    strcat(str, "*");
    printf("%s\n", str);	
}

짜고보니 snowall 님과 비슷하네요 ^^;

-----
Do It Now!


-----
Do It Now!

select99의 이미지

--------------------첫번째------------------------
int i;
char str[11];
for(i=0; i<10; i++) {
memset(str, '*', i );
str[i] = 0;
printf("%s\n", str);
}
--------------------두번째------------------------

int i;
for(i=0; i<10; i++) printf("%.*s\n", i, "**************************************" );

Fe.head의 이미지

    for( int i = 0 ; i <= 4 ; ++i ) {
        char * pBuff = new char[i+1];
        std::fill( &pBuff[0], &pBuff[i+1], '*' );
        pBuff[i] = 0;
        cout << pBuff << endl;
        delete pBuff;
    }

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

d3m3vilurr의 이미지

안나온 방식으로 짜보려고 하니 머리가 아파영

#include <iostream>
 
using namespace std;
 
int main() {
    cout.fill('*');
    for (int i = 1; i < 11; i++) {
        cout.width(i);
        cout << '*' << endl;
    }
}
alfalf의 이미지

Python 버젼 입니다. =3

print '\n'.join(('*' * (i + 1) for i in range(10)))

세이군의 이미지

제목에 "C++"라고 되어 있으므로 이건 무효일 듯...

d3m3vilurr의 이미지

KLDP 역사 대대로 그래오지 않았나요;)
문제 보자마자 파이썬 버전 언제쯤 올라올까 생각했는걸요 :)

kmryu의 이미지

멋진 언어입니다. lisp버전도 보고 싶네요. ^^;

bootmeta의 이미지

(defparameter *string* (string ""))
(dotimes (i 4)
  (format t "~a~%" (setf *string* (concatenate 'string *string* "*"))))

kirrie의 이미지

갑자기 코드골프 분위기가...

루비 버전 나갑니다. (20분 배우고 해보는거라 어색해도 이해해주세요;;)

[1,2,3,4].each { |i| puts "*" * i + "\n"}

--->
데비안 & 우분투로 대동단결!

--->
데비안 & 우분투로 대동단결!

Tirin의 이미지

별건 아니구요;

10.times { |i| puts "*" * i }

- Tirin.

- Tirin.

khj776의 이미지

30분 생각해서 간신히 하나 ..ㅠㅠ

for(i=0;i {

memset(arr, 0x00, sizeof(arr));
memset(arr, '*', i+1);
arr[i+1]='\n';
puts(arr);

}

select99의 이미지

오류가 있네요.ㅎㅎ

ddoman의 이미지

주제는 C++ 퀴즈인데도
STL을 활용하시는 분이 적네요!

void star( int num )
{
        std::cout.width( num );
        std::cout.fill( '*' );
        std::cout << "" << std::endl;
}
 
int whatever[] = { 1, 2, 3, 4, 5 };
std::for_each( &whatever[0], &whatever[5], star );
winner의 이미지

실제로 반복의 정의를 어디까지 봐야하죠?
기본적으로 출력함수가 문자를 반복적으로 출력하는 것은 똑같은데 말이죠
제가 생각하기에는 표현만 다를뿐 일단 2중 반복은 똑같은게 아닐까요?
물론 다른 표현의 가치는 충분히 있다고 생각합니다.

snowall의 이미지

재귀적이지도 않고 for, while등을 쓰지도 않았으니까 괜찮은 것 같은데요.
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

klutzy의 이미지

int main(){
    int N = 10;
    for(int i=0; i&lt;N*(N+3)/2; i++){
        double d = sqrt(2*i+4.25)-1.5;
        d = d-int(d);
        cout &lt;&lt; d==0? "\n" : "*";
    }
}

N이 크면 오차가 있을 수 있습니다 :P N=40까지는 잘 되네요.

esrevinu의 이미지

d(d+1)/2 + (d-1) = i
를 이용하셨군요.
실수형에 대한 ==는 어떤 의미인지 모르겠네요.

wkpark의 이미지

for (int n=10,i=1,j=1;j<=n;i++)
  ((i % (j*(j+1)/2)) == 0) ? j++,cout << "*\n":cout <<"*";

이런식을 의도하신듯 하네요. cout을 한번만 사용하려 하신 듯.

온갖 참된 삶은 만남이다 --Martin Buber

Fe.head의 이미지

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main()
{
    for( int i = 0 ; i <= 4 ; ++i ) {
        vector<char>    vc( i+1, '*' );
        copy( vc.begin(), vc.end(), ostream_iterator<char>( cout ) );
        cout << endl;
    }
    return 0;
}

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

Fe.head의 이미지

#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    for( int i = 0 ; i <= 4 ; ++i ) {
        string  str( i+1, '*' );
        cout << str << endl;
    }
    return 0;
}

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

Fe.head의 이미지

    for( int i = 0 ; i < 5 ; ++i )
        cout << string( i+1, '*' ) << endl;

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

esrevinu의 이미지

for (int i = 1, j = 1; i <= N; j++) {
    cout << "*";
    if (j == i) {
      cout << "\n";
      i++;
      j = 0;
    }
  }

pjm0616의 이미지

#include &lt;cstdio&gt;
using namespace std;
 
int main(void)
{
	int n = 10;
	int i, j;
 
	for(i = 0, j = -1; 
		(i >= n)?0:
		(
			(j < i)?
			(
				putchar('*'), 
				j++
			):
			(
				putchar('\n'), 
				j = -1, 
				i++
			), 1
		)
		; );
 
	return 0;
}

snowall의 이미지

그런데, 이런걸 굳이 3중이나 4중 루프로 짤 수도 있나요?
trivial solution은 말구요...;
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

다즐링의 이미지

for x in range(1,10):
    print x * "*"

역시 사기인가 -_-;

쓰고보니 위에 원라이너가 ㅎㅎ
------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

winner의 이미지

재귀라 안되나?... -_-.

madman93의 이미지

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

neogeo의 이미지

   star.h
 
#include < string >
#include < iostream >
 
using namespace std;
 
template < unsigned int n > struct star;
template < unsigned int n > ostream& operator<<( ostream& out, const star< n >&);
 
template < unsigned int n > struct star
{
    friend ostream& operator<< < n > ( ostream& out, const star< n > &my);
};
 
template < > struct star< 1 >
{
    friend ostream& operator<< < 1 > ( ostream& out, const star< 1 > &my);
};
 
template < unsigned int n > ostream& operator<< ( ostream& out, const star< n >& star_n)
{
    cout << star< n-1 >();
    for(int i = 0; i < n; ++i )
        cout << "*";
    cout << endl;
}
 
template < > ostream& operator<< <1> ( ostream& out, const star< 1 >  &my)
{
    cout << "*" << endl;
}

 main.cpp
 
#include "star.h"
 
int main(int argc,char** argv)
{
        cout << star<5>();
        return 0;
}

재귀여도 meta 가 아름다워요 @_@

런타임이 아니라 컴파일타임 재귀이므로 재귀가 아니라고 주장하겠습니다.. ( >_< )

Neogeo - Future is Now.

Neogeo - Future is Now.

blueiur의 이미지

이런걸 보고있으면 python으로 코딩하는게 정말 축복이라는 ㅠㅠ

blueiur의 이미지

print os.linesep.join( map(lambda x: '*' * x, range(1,5)) )

range 함수는 리스트를 만들어 주는거니까 포문이 없긴 없죠?

print os.linesep.join( map(lambda x: '*' * x, [1,2,3,4,5]) )

포문이 실제로 없는 코드;;;
snowall의 이미지

int i,j;
j=0;
char a="***********************************************" //이 별표는 n*n/2개보다 충분히 많아야 합니다.
for(i=1;i<n;i++){
j+=i;
a[j]="\n";
}
printf("%s",a);

머릿속에서는 될 것 같은데...이런 코드가 실제로 작동할까요?
회사에서 일하는 중이라 컴파일 해볼 수가 없군요 -_-;

--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

M.W.Park의 이미지

lists:foreach(fun(X) -> io:format("~s~n", [s:duplicate(X, $*)]) end, lists:seq(1,4)).

대괄호 이후의 lists가 제대로 랜더링이 안되네요.
"s"로 표시된 곳은 lists입니다.

이런거 하는 데 한 줄 이상이 필요하면 안되죠. ^^;
-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

[/]

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

ironiris의 이미지

int main(void) {
        int i;
        for(i=0;i<4;i++){
                switch(i){
                        case 3:
                                putchar('*');
                        case 2:
                                putchar('*');
                        case 1:
                                putchar('*');
                        case 0:
                                putchar('*');
                }
                putchar(0x0A);
        }
}
leonid의 이미지

loop{puts'*'*~-$.+=1}
무한루프 버전입니다.

puts$*.pack'c*'while$*<<42
무한루프 2 : array와 pack을 사용해봤습니다.

('*'*10).scan(/./){puts$`+$&}
regexp를 사용해봤습니다.

suns1997의 이미지

허접한 실력이지만 펄버전 하나 올립니다 ㅋ

print (map "*"x $_."\n",(1..10));

JuEUS-U의 이미지

자,,,, 상큼하게 한번 맞아볼까요 =ㅅ=)ㅋ;;;

int main()
{
	int i, j;
 
	for( i=1 ; i<=5 ; i++ )
    {
        j = 0;
jloop:
        printf( "*" ); 
 
        j++;
        if( j < i ) goto jloop;
 
		printf( "\n" );
 
    }
 
}
snowall의 이미지

금단의 흑마법 goto 문을 쓰셨군요. -_-;
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

Fe.head의 이미지

goto if 문도 루프문입니다.
do while ?
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

lowdos의 이미지

class Triangle
{
public:
    Triangle(int n)
    {
        std::vector<char> vec(n, '*');
        std::cout << &vec.at(0) << "\n";
    }
};
 
int main(int argc, char **argv)
{
    for(int i=1; i < 5; i++)
        Triangle tri = Triangle(i);
 
    return 0;
}
frole의 이미지

#define SSIZE 10
string tmps = "";
for(int i = 0; i < SSIZE ; i++)
{
tmps += "*";
cout << tmps << endl;
}

i'm a student who is studing network programming

amorette의 이미지

PERL 버전입니다.
0)

for my $times ( 1 .. 5 ) {
print ("*" x $times, "\n");
}

1)

for $a (1..5) { s/\n?$/*\n/ and print }

2)

map {print "*"x$_,"\n"} 1..5

3)

print "@{[q<*>x$_]}\n" for 1..5

amorette의 이미지

main()
{
&nbsp;&nbsp;&nbsp;&nbsp;char *line = "*****";
&nbsp;&nbsp;&nbsp;&nbsp;char *p = &line[4];
 
&nbsp;&nbsp;&nbsp;&nbsp;int i = 5;
&nbsp;&nbsp;&nbsp;&nbsp;while (i--)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n", p--);
}

왠지 중복일 것 같은 느낌이 ...

select99의 이미지

새로운방법이 하나더 생각났네요...메모리도증가하지 않고 N 개만큼 찍을수 있는..

        int i,j;
 
        for(i=0, j= 0; i < 10; j++)         
        {
                if( i == j ){ j = -1; i++;}
 
                printf( "*" );
                if( j < 0 ) printf( "\n" );
        }
snowall의 이미지

가장 메모리를 덜 먹는 알고리즘이네요
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

winner의 이미지

대부분 꼼수라고 불릴만한 것들이긴 합니다만 상당히 의미있는 작업인 것 같아요.
주어진 조건을 가장 잘 해결하는 것은 for 문안에서 if문으로
i와 j를 조절하는 것인 같군요.

skdhdndp의 이미지

int main()
{
int i;
int j;
int n;
int b=1;

printf("input num : ");
scanf("%d", &n);

for(i=0;;++i)
{
if(b == i)
{
if(b == n)
{
break;
}
else
{
printf("\n");
i=0;
b++;
}
}
printf("*");

/* for(j=0; j {
printf("*");
}
printf("\n");*/
}
return 0;
}

powersys의 이미지

오래된 글이지만.. 이왕 올라왔으니..

한번적어봅니다.

(n : 삼각형크기)

int main( void )
{
	int i, j, n = 5;
 
	for( i = 0, j = 0; j <= n; i++ ) putchar(( i == j )? ( i = -1, j++, 10 ) : 42 );
	return 0;
}

결과

*
**
***
****
*****
gijung의 이미지

한줄로 한번 해봤습니다. -.-;;
int i,j,n, i_o, j_o;
char c;
n=10;
for(i=0,j=0; i < n; i_o=i, j_o=j, j=(j_o<i_o)?j_o+1:0, i=(j_o>=i_o)?i_o+1:i_o, c=(i==j)? '\n':'*', printf("%c",c));

kaeri17의 이미지

template stars(int n)
{
	static if(n==0)
		const char [] stars = "*";
	else
		const char [] stars = "*" ~ stars!(n-1);
}
template n_stair_stars(int n)
{
	static if (n == 0)
		const char [] n_stair_stars = stars!(n);
	else
		const char [] n_stair_stars = n_stair_stars!(n-1) ~ "\n" ~ stars!(n);
}
pragma(msg, n_stair_stars!(4));

컴파일타임에 실행은 물론 출력까지...
JuEUS-U의 이미지

또 한번 해봤습니다.
for문을 아예 사용하지 않습니다 = ω=)a;;;;

class Stars
{
private:
  static int i;
  static const char *str;
 
public:
  Stars () {
    cout << str+(4-i++) << endl;
  }
};
int Stars::i = 0;
const char* Stars::str = "*****";
 
int main ()
{
  Stars stars[5]; 
}

rubenz의 이미지

int main( void )
{
int i
char szMsg[10];
memset(szMsg,'\0',10);
for( i = 0; i < 4 ; i ++ )
{
memset(szMsg,'*',i+1);
printf("%s\n",szMsg);
}
return 0;
}

돌려 보지는 않아서.. 모르겠습니다..(아... 위에 있구나..ㅠ.ㅠ)

fkaldyd의 이미지

아직 String 안배워서 for문으로는 못하네요 ^^;
#include
int main(){
printf("*\n**\n***\n");
}