将棋とプログラミング

将棋の学習記録とプログラミングの創作記録

yukicoder No.648  お や す み 

No.648 お や す み - yukicoder

解いた問題。簡単な問題。

/**************************************************************
初項1、公差1、の等差数列の和が入力した数と同じになる場合は
「YES」とその項数を出力し、同じにならない場合は「NO」と出力する
プログラム
入力:指定した数値n
出力:nと数列の和が同じになる場合は「YES」とその項数、違う場合は「NO」
**************************************************************/
#include<stdio.h>
#include<inttypes.h>

int main(){

    long long int i = 1;    /* 等差数列の項数 */
    long long int n;    /* 指定した数値n */

    scanf("%"SCNd64"",&n);  /* 入力 */

    /* 等差数列の和がn以上になるまで*/
    while( (i*(i+1))/2 < n ){
        i++;
    }
    
    if( (i*(i+1))/2 == n ){ /* nと等差数列の和が同じだった場合 */
        printf("YES\n%lld\n",i);    /* 「YES」とその項数を出力 */
    }else{
        printf("NO\n"); /* 「NO」を出力 */
    }

    return 0;
}