JOJ 1007 문제 풀기.

 1007: Triangles


Result
TIME Limit
MEMORY Limit
Run Times
AC Times
JUDGE
3s
8192K
7020
2611
Standard
A triangle can be made up out of dots, like the ones shown below:
The number of dots in each one is called a triangular number. More precisely, a number is said to be triangular if it is of the form ½ n(n+1). The numbers 1, 3, 6, 10, and 15 are all triangular.
Given a number, determine if it is triangular. If it is, draw the corresponding right triangle, if it is not, say so.

Input


A positive integer less than 2000. Each case will be on a separate line. A zero (0) denotes the end of input.

Output


The phrase “ is a triangular number.” followed by a right triangle of “*” characters, or the phrase “ is not a triangular number.” The triangle should be oriented with the hypotenuse on the right and the right angle in the lower left.

Sample Input

3
4
6
0

Sample Output

3 is a triangular number.
*
**
4 is not a triangular number.
6 is a triangular number.
*
**
***

코드는 다음과 같습니다.
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;

bool isTriangle(int n)
{
    n = 2*n;
    int srt = (int)sqrt(n);
    if (srt * (srt + 1) == n)
        return  true;
    return false;
}

void printTriangle(int n)
{
    for (int i = 1 ; i <= n; i ++)
    {
        for(int j = 1; j <= i ; j ++)
            cout<<"*";
        cout<<endl;
    }
}
int main()
{
    queue<int> input;
    int a;
    while (cin>>a && a!=0)
    {
        input.push(a);
    }
    while (!input.empty())
    {
        if(isTriangle(input.front()))
        {
            cout << input.front() << " is a triangular number."<<endl;
            printTriangle((int)sqrt(input.front()*2));
        }
        else
        {
            cout << input.front() << " is not a triangular number."<<endl;
        }
        input.pop();
    }
    return 0;
}
주요 문제 풀이 사고방식:
만약 한 수가 삼각수라면 반드시 N=1/2*n(n+1)이 있기 때문에 2*N=n*(n+1)이 있다.
출시 가능: nn*(n+1)(주: 정수 부분을 캡처하면 이 결과는 틀림없이 하나의 정수가 아니다)
그리고 n*(n+1)==2*N이 있는지 확인하십시오. 만약 그렇다면 N은 삼각수입니다. 그렇지 않으면 삼각수가 아닙니다.
이것들을 알게 되면 위의 문제풀이 방향을 이해하기 어렵지 않을 것이다!!
부적당한 요청이 있으면 메시지를 남겨 주시고, 함께 토론하고, 함께 진보하세요!

좋은 웹페이지 즐겨찾기