三角数#
题目描述#
将自然数按下列方式堆成一个三角形,从上到下数,请问第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,否则会溢出