H. Pair
Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format:
%lld Java class name:
Main
给出一个正整数N,从1到N这N个数中选出若干对pair,每个pair是1到N中不相等的两个数,1到N中每个数只能被选择一次,每个pair的值是它两个数的和,要求任意两个pair的值不相等,并且每个pair的值不超过N,问最多可以选出多少个pair。
Input
第一行为一个整数T,代表数据组数,T<=100。
接下来T行,每行一个正整数N,N<=100。
Output
对于每个输入N,输出最多可以选出多少对pair,每个输出占一行。
Sample Input
3 1 2 3
Sample Output
0 0 1
Hint
样例解释:
N=1时,不能选出两个数,所以为0;
N=2时,只能选出1和2组成一个pair,但是1+2=3>2,所以也为0;
N=3时,可以选择1和2组成一个pair,1+2=3<=3,可行,并且答案最大为1。
找规律,这道题要看打表,根据表找出规律,
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool b[1000],c[1000];
int s,n;
int fun(int r,int x){
if (x>s) s=x;
for (int i=r; i<n; i++){
for (int j=i+1; j<n; j++){
if (i+j<=n && c[i+j]==0 && b[i]==0 && b[j]==0){
b[i]=1;b[j]=1;c[i+j]=1;
fun(i+1,x+1);
b[i]=0;b[j]=0;c[i+j]=0;
}
}
}
}
int main()
{
int t;
memset(b,0,sizeof(b));
//while (~scanf("%d",&n)){
for (n=0; n<100; n++){
s=0;
fun(1,0);
printf("%d=%d\n",n,s);
}
return 0;
}
代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int d;
scanf("%d",&d);
int yu,shang;
shang=d/5;
yu=d%5;
if(yu==1||yu==2)
{
printf("%d\n",2*shang);
}
else if(yu==0)
printf("%d\n",2*(shang-1)+1);
else printf("%d\n",2*shang+1);
}
}