A蓝瘦香菇
思路:
01对于输出字符串类的题目,可以寻找它们的首字符(当然也不仅限于首字符,只要不同即可),利用首字符的不同,判定输出指定字符串。
02也可以根据指定字符串的长度来进行区别输出
03当然也可以比较字符串是否相同,可以利用字符串比较函数,返回值是否为零来进行判定
01
#include"stdio.h"
int main()
{
char a[1024];
gets(a);
printf("%s\n",a[0]=='l'?"xianggu":"lansou");
return 0;
}
02
#include"stdio.h"
#include"string.h"
int main()
{
char a[1024];
int len;
gets(a);
len=strlen(a);
printf("%s\n",len==6?"xianggu":"lansou");
return 0;
}
03
#include"stdio.h"
#include"string.h"
int main()
{
char a[1024];
gets(a);
printf("%s\n",strcmp(a,"xianggu")?"xianggu":"lansou");
return 0;
}
B 这么近,那么远
思路:
01本质就是计算两个坐标间的距离,可以利用两点间的距离公式,需要注意的是,单位长度为0.6米。
02计算距离,可以利用函数hypot
hypot
功能:计算直角三角形的斜边长
头文件:、
用 法: double hypot(double x, double y);
01
#include"stdio.h"
#include"math.h"
int main()
{
int x0,y0,x1,y1;
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
double result;
result=0.6*sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));
printf("%.2lf\n",result);
return 0;
}
02
#include"stdio.h"
#include"math.h"
int main()
{
int x0,y0,x1,y1;
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
double result;
result=0.6*hypot(x1-x0,y1-y0);
printf("%.2lf\n",result);
return 0;
}
C 三只小熊
思路:
利用数学公式,计算出各个图形的面积,利用自定义的函数求出最大面积,判定最大面积,然后输出相应字符串。
#include"stdio.h"
#include"math.h"
double max(double a,double b)
{
return a>b?a:b;
}
int main()
{
int a,b,c;
double pi,s_san,s_yuan,s_zheng,s_max;
scanf("%d%d%d",&a,&b,&c);
pi=acos(-1.0);
s_san=sqrt(3)/4*a*a;
s_yuan=pi*b*b;
s_zheng=c*c;
s_max=max(s_san,max(s_yuan,s_zheng));
if(s_max==s_san)puts("triangle");
else if(s_max==s_yuan)puts("circle");
else puts("square");
return 0;
}
D 流星雨
思路:
对于周期问题,一般都有陷阱,即边缘数据的处理,此题以20天为一个周期,当输入19、20天时,应输出第1天;当输入20、1天时,应输出第2天。所以这里采用增长数组的方法,即20—>22。
#include"stdio.h"
int main()
{
int aa[22]=,a,b;
scanf("%d%d",&a,&b);
for(int i=0;;i++)
{
if(aa[i]==a&&aa[i+1]==b)
{
printf("%d\n",aa[i+2]);
return 0;
}
}
}
E 排队列
思路:
排序之后,进行比较即可,边缘数据,单独考虑。
#include"stdio.h"
int main()
{
int n,num,a[1024];
scanf("%d",&n);
for(int i=0;i
scanf("%d",&a[i]);
scanf("%d",&num);
for(int i=0;i
for(int j=0;j
if(a[j]>a[j+1])
a[j]^=a[j+1]^=a[j]^=a[j+1];
if(num
if(num>a[n-2])
for(int i=0;i
{
if(num>a[i]&&num
{
printf("%d\n",i+2);return 0;
}
}
}
F Twins
思路:
这道题需要做三件事,判断素数,逆序转换,判定输出。充分体现了模块化设计原则。判断素数模块,整数逆序转换模块。
#include"stdio.h"
int prime(int n)
{
for(int i=2;i*i
if(n%i==0)return 0;
return 1;
}
int f(int n)
{
int ret=0,di;
while(n)
{
di=n%10;
ret=ret*10+di;
n/=10;
}
return ret;
}
int main()
{
int n;
scanf("%d",&n);
if(prime(n)&&prime(f(n)))puts("Yes");
else puts("No");
return 0;
}
G 一封情书
思路:
根据题意加减字符即可,需要注意的是,依旧是边缘数据,即A,B,C,a,b,c的转换。需要指出的是,实践证明,这道题(不仅仅是这道题,有兴趣的同学,可以试试把边缘数据去掉),不考虑边缘数据,提交到学校oj上也是可以通过的,这就比较坑!!!但是去掉边缘数据是不正确的。
#include"stdio.h"
int main()
{
char a[1024];
gets(a);
for(int i=0;a[i];i++)
{
if(a[i]>='D'&&a[i]='d'&&a[i]
a[i]-=3;
else
if(a[i]>='A'&&a[i]='a'&&a[i]
a[i]+=23;
}
printf("%s\n",a);
}
H 琅琊榜
思路:
采用结构体,冒泡法排序,打擂台,即可。
#include"stdio.h"
struct player
{
char a[10];
int num;
double time;
}play[20],temp,min;
int main()
{
int n,max;
scanf("%d",&n);
for(int i=0;i
{
scanf("%s%d%lf",play[i].a,&play[i].num,&play[i].time);
}
for(int i=0;i
for(int j=0;j
if(play[j].num
{
temp=play[j];
play[j]=play[j+1];
play[j+1]=temp;
}
max=play[0].num;
min=play[0];
for(int i=1;i
if(play[i].num==max)
if(min.time>play[i].time)
min=play[i];
else;
else
{
printf("%s %d %.2lf\n",min.a,min.num,min.time);
return 0;
}
}
*指针*版本,正在写。。。
不着急。。。
领取专属 10元无门槛券
私享最新 技术干货