XTUOJ 三角数

发布于:2025-02-11 ⋅ 阅读:(45) ⋅ 点赞:(0)

三角数#

题目描述#

将自然数按下列方式堆成一个三角形,从上到下数,请问第n行一共有多少个偶数?

    1
   2 3
  4 5 6
 7 8 9 10
 ...   

输入格式#

第一行是一个整数T (1≤T≤1000),表示样例的个数。

以后的每行一个整数n (1≤n≤1018)。

输出格式#

依次每行输出一个样例的结果,为一个整数。

样例输入#

4
1
2
3
4

样例输出#

0
1
2
2
#include<stdio.h>
#include<math.h> 
int main()
{
   int N;
   scanf("%d",&N);
   while(N--)
   {
       unsigned long long n;
       scanf("%lld",&n);
       if(n==1)
       printf("0\n");
       else if(n==2)
       printf("1\n");
       //找规律
       //3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (第几行)
       //2 2 2 3 4 4 4  5  6  6  6  7  8  8  8  9 10 10 (有几个偶数)
       else if(n%2==0&&n/2%2!=0)
       {
           printf("%lld\n",n/2);
       }
       else
       {
       	  if(n%2==0&&n/2%2==0)
           printf("%lld\n",n/2);
           else if((n+1)%2==0&&(n+1)/2%2==0)
           printf("%lld\n",(n+1)/2);
           else if((n-1)%2==0&&(n-1)/2%2==0)
           printf("%lld\n",(n-1)/2);
       }
           
   }       
   return 0;
}

第一种:6,10,14,18这类行数,本身除2可除尽,但除以2之后再除旧除不尽了,例如6/2=3,但3/2.......1    输出n/2

第二种:4,8,12,16这类行数,本身可除尽,除以2之后依然可除尽,直接输出n/2

第三种:3,7,11,15这类行数,除不尽,但加1可除尽

第四种:5,11,15,19这类行数,除不尽,但减1可除尽

第一种和第二种也可以合并起来!

#include<stdio.h>
#include<math.h> 
int main()
{
   int N;
   scanf("%d",&N);
   while(N--)
   {
       unsigned long long n;
       scanf("%lld",&n);
       if(n==1)
       printf("0\n");
       else if(n==2)
       printf("1\n");
       //找规律
       //3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (第几行)
       //2 2 2 3 4 4 4  5  6  6  6  7  8  8  8  9 10 10 (有几个偶数)
         else if(n%2==0)//1和2
         printf("%lld\n",n/2);
         else if((n+1)%2==0&&(n+1)/2%2==0)//3
         printf("%lld\n",(n+1)/2);
         else if((n-1)%2==0&&(n-1)/2%2==0)//4
         printf("%lld\n",(n-1)/2);
           
   }       
   return 0;
}

注意,输入输出都要用%lld,否则会溢出


网站公告

今日签到

点亮在社区的每一天
去签到