第一题:比大小
转化为字符串来判断数的大小,首先判断第一位的符号,正号>负号; 其次判断长度,不相等时,如果是正数,长>短。如果是负数,短>长;相等时,直接strcmp。
#include<stdio.h>
#include<string.h>
int main()
{
int t=0,lena,lenb;
char a[1100],b[1100];
while(scanf("%s%s",a,b)&&(t<=10)&&(strcmp("0",a)!=0)||(strcmp("0",b)!=0))
{
lena=strlen(a);
lenb=strlen(b);
if(a[0]=='-'&&b[0]!='-')
printf("a<b\n");
else if(a[0]!='-'&&b[0]=='-')
printf("a>b\n");
else if(a[0]=='-'&&b[0]=='-'&&lena!=lenb)//此处一定要将字符串a,b的长度不相等写上
{
if(lena>lenb)
printf("a<b\n");
if(lena<lenb)
printf("a>b\n");
}
else if(a[0]!='-'&&b[0]!='-'&&lena!=lenb)//同上
{
if(lena<lenb)
printf("a<b\n");
if(lena>lenb)
printf("a>b\n");
}
else if(a[0]=='-'&&b[0]=='-'&&lena==lenb)
{
if(strcmp(a,b)>0)
printf("a<b\n");
else if(strcmp(a,b)<0)
printf("a>b\n");
else
printf("a==b\n");
}
else if(a[0]!='-'&&b[0]!='-'&&lena==lenb)
{
if(strcmp(a,b)>0)
printf("a>b\n");
else if(strcmp(a,b)<0)
printf("a<b\n");
else
printf("a==b\n");
}
t++;
}
return 0;
}
直接把今年的每个月的天数统计出来(特殊的就是判断2月有29天还是28天,就变成了判断是否为闰年),然后把1月到当前月份的天数加起来,最后再把这个月的剩余天数加起来就O了。
#include<stdio.h>
int main()
{
int a,b=0,c,y,m,d,fib;
scanf("%d",&a);
while(a--)
{
scanf("%d %d %d",&y,&m,&d);
if(y%400==0||y%100!=0&&y%4==0)
fib=29;
else fib=28;
for(c=1; c<=m; c++)
switch(c-1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
b+=31;
break;
case 2:
b+=fib;
break;
case 4:
case 6:
case 9:
case 11:
b+=30;
break;
}
b+=d;
printf("%d\n",b);
b=0;
}
return 0;
}
第三题:分数拆分
数学题,1/k=1/x+1/y.这个等式转化成 1/k=(x+y)/xy ,k就等于k=xy/(x+y);因为x>y,我们直接枚举x和y的值,这题求出来了。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int x,y,k;
scanf("%d",&k);
for(y=k+1;y<=2*k;y++)
{
for(x=k+1;x<=k*(k+1);x++)
{
if(x*y==k*(x+y))
printf("1/%d=1/%d+1/%d\n",k,x,y);
}
}
}
return 0;
}
第四题:矩形的个数
此题是求出N*M的矩形能分成多少小矩形,其实很简单,还是数学几何题,你想一下,长度为N的边可以分成多少情况?长度为1的话有N种,长度为2的话有N-1种,。。。。长度为N的有1种,由等差数列求和公式求出来有(1+N)*N/2种。长度为M的边如上,求出有(1+M)*M/2种。 好了,每个边的分割方式都求出来了,你想一下,在长度为N这条边的分割方式中使其中一个和长度为M边的任意一种分割方式组合起来都正好对应一个不同的矩形。。。。。所以求矩阵数就等于 N*(N+1)/2*M*(M+1)/2;还是不会的去问NQD学长。
#include<stdio.h>
int main()
{
long long a,b;
while(~scanf("%lld%lld",&a,&b))
{
printf("%lld\n",a*(a+1)*(b+1)*b/4);
}
return 0;
}
第五题:16进制的简单运算
考输入格式的,不懂得去看书
#include <stdio.h>
int main()
{
int a,b,n;
scanf("%d",&n);
while(n--)
{
scanf("%x %x",&a,&b);
printf("%o\n",a+b);
}
return 0;
}
第六题:车牌号
字符串比较。
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m;
scanf("%d",&m);
getchar();
char a[6],b[6];
gets(a);
while(--m)
{
gets(b);
if(strcmp(b,a)<=0)
strcpy(a,b);
}
puts(a);
}
return 0;
}
第七题:king选太子
排序,抽中间数
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()//
{
int T;
scanf("%d",&T);
while(T--)
{
int n,h;
scanf("%d",&n);
int a[18];
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
for(int k=0;k<n;k++)
for(int i=0;i<n-k-1;i++)
if(a[i]>a[i+1])
{
h=a[i];
a[i]=a[i+1];
a[i+1]=h;
}
printf("%d\n",a[n/2]);
}
return 0;
}
第八题:小明的烦恼
判断题,和成绩分级那个一样
#include<stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char a[11];
int i;
scanf("%s",a);
for(i=0; i<11; i++)
{
if(a[i]>=97&&a[i]<=99)
{
printf("2");
}
else if(a[i]>=100&&a[i]<=102)
{
printf("3");
}
else if(a[i]>=103&&a[i]<=105)
{
printf("4");
}
else if(a[i]>=106&&a[i]<=108)
{
printf("5");
}
else if(a[i]>=109&&a[i]<=111)
{
printf("6");
}
else if(a[i]>=112&&a[i]<=115)
{
printf("7");
}
else if(a[i]>=116&&a[i]<=118)
{
printf("8");
}
else if(a[i]>=119&&a[i]<=122)
{
printf("9");
}
}
printf("\n");
}
return 0;
}
第九题:小明的调查统计
求最大值,最小值
#include <stdio.h>
#include <string.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,i;
scanf("%d",&N);
int a[105];
for(i=1;i<=N;i++)
{
scanf("%d",&a[i]);
}
int maxn=0,minn=1000;
for(i=1;i<=N;i++)
{
if(a[i]>=maxn)
maxn=a[i];
if(a[i]<minn)
minn=a[i];
}
printf("%d\n",maxn-minn);
}
return 0;
}
第十题:小明求素数积
求N以内的素数,然后相乘,很简单,因为可以取巧,因为数据很小,所以直接打表,就是把要求的数据直接存在数组里,至于怎么求出来的,肯定是私下求啊。打表是一个很取巧的,但是却能高效的解决问题,推荐~~
#include<stdio.h>
int da[500]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,
163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,
367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593
,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827
,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
int main(){
int n,a;
scanf("%d",&n);
while(n--){
int sum=1;
scanf("%d",&a);
for(int i=0;i<500;i++){
if(da[i]>a){
printf("%d\n",sum);
break;
}
sum*=da[i]%1000000;
sum%=1000000;
}
}
}