SDUT ACM OJ PTA 实验一 结构体、共用体和枚举

这个学期开始就会难一点,前面基础不好的同学一定要好好复(yv)习一下上学期学习的基础知识。
有能力的同学可以开始学习c++了,c++跟c差不多主要需要学习的是函数的使用。
这部分的排序我还用的两个for,有余力的同学可以学习使用qsort。
A - 检查宿舍卫生

#include<stdio.h>
struct dormitory_scores
{
	int a,b,c,d,e,sum;
}ds;

int main()
{
	int n,max=-1,k=0;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d %d %d %d %d",&ds.a,&ds.b,&ds.c,&ds.d,&ds.e);
		ds.sum=ds.a+ds.b+ds.c+ds.d+ds.e;
		if(ds.sum>max) max=ds.sum;//记录最高分
		if(ds.sum<85) k++;//k用来记录不合格宿舍数量
	}
	//如果最高分都低于85就没有合格的宿舍,直接输出no
	if(max<85) printf("%d No",k);
	else printf("%d %d",k,max);
}

B - 小 I 的小姐姐

#include<stdio.h>
struct little_sister
{
	int p1,p2,p3;
	double sum;
}ls;

int main()
{
	int n,max=-1,k=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d %d %d",&ls.p1,&ls.p2,&ls.p3);
		ls.sum=ls.p1*0.7+ls.p2*0.2+ls.p3*0.1;
		if(ls.sum>max) 
		{
			max=ls.sum;
			k=i;//k用来记录最多
		}
	}
	printf("%d",k);
}

C - 选票统计

#include<stdio.h>

int main()
{
	int n,m,max=-1,k=0; 
	scanf("%d %d",&m,&n);
	int a[1005]={0};
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		a[x]++;
		if(a[x]>max) 
		{
			max=a[x];
			k=x;//k用来记录最多
		}
	}
	printf("%d\n%d",k,a[k]);
}

D - 小 I 选宾馆

#include<stdio.h>
struct room_choose
{
	int price,comfort;
}rc;

int main()
{
	int n,k=0,ma1=-1,ma2=-1;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d %d",&rc.price,&rc.comfort);
		if(rc.price>ma1)
		{
			k=i;
			ma1=rc.price;
			ma2=rc.comfort;
		}
		else if(rc.price==ma1)
		{
			if(rc.comfort>ma2)
			{
				k=i;
				ma2=rc.comfort;
			}
		}
	}
	printf("%d",k);
}

E - 小鑫の日常系列故事(十)——排名次

//这道题目的排序部分可以使用qsort,感兴趣的童鞋可以学一学
#include<stdio.h>
#include<algorithm>
struct arrange_position
{
	char name[15];
	int score;
}ap[55],a;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)	scanf("%s %d",&ap[i].name,&ap[i].score);	
	for(int i=n-1;i>0;i--)
	{
		for(int j=0;j<i;j++)
		{
			if(ap[j].score<ap[j+1].score)
			{
				a=ap[j];
				ap[j]=ap[j+1];
				ap[j+1]=a;
			}
		}
	}
	for(int i=0;i<n;i++)	printf("%s %d\n",ap[i].name,ap[i].score);
}

F - 最终排名

#include<stdio.h>
struct finally_position
{
	int id,number;
}fp[10005],a;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)	scanf("%d %d",&fp[i].id,&fp[i].number);	
	for(int i=n-1;i>0;i--)
	{
		for(int j=0;j<i;j++)
		{
			if(fp[j].number<fp[j+1].number)
			{
				a=fp[j];
				fp[j]=fp[j+1];
				fp[j+1]=a;
			}
		}
	}
	for(int i=0;i<n;i++)	printf("%d %d\n",fp[i].id,fp[i].number);
}

G - 选夫婿1

#include<stdio.h>
struct choose_husband
{
	char name[15];
	int hight,weight;
}ch[10005],t;

int main()
{
	int i,j,n,a,b,c,d,k=1;
	scanf("%d",&n);
	for(i=0;i<n;i++)	scanf("%s %d %d",&ch[i].name,&ch[i].hight,&ch[i].weight);
	for(i=n-1;i>0;i--)
	{
		for(j=0;j<i;j++)
		{
			if(ch[j].hight>ch[j+1].hight)  //先按身高排序
			{
				t=ch[j];
				ch[j]=ch[j+1];
				ch[j+1]=t;
			}
			else if(ch[j].hight==ch[j+1].hight)  //按体重排序
			{
				if(ch[j].weight>ch[j+1].weight)
				{
					t=ch[j];
					ch[j]=ch[j+1];
					ch[j+1]=t;
				}
			}
		}
	}
	scanf("%d %d %d %d",&a,&b,&c,&d);
	for(i=0;i<n;i++)
	{
		//对排序完成的进行筛选
		if((ch[i].hight>=a&&ch[i].hight<=b)&&(ch[i].weight>=c&&ch[i].weight<=d))
		{
			printf("%s %d %d\n",ch[i].name,ch[i].hight,ch[i].weight);
			k=0;//标记有没有合格的人
		}
	}
	if(k==1)
	{
		printf("No\n");
		return 0;
	}
}

H - 老–质价比

#include<stdio.h>

struct zjb
{
	int zl;
	int jg;
}s[105],t;

int main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)	scanf("%d",&s[i].zl);
	for(i=0;i<n;i++)	scanf("%d",&s[i].jg);
	for(i=n-1;i>0;i--)
	{
		for(j=0;j<i;j++)
		{
			if(s[j].zl>s[j+1].zl)//先对质量排序
			{
				t=s[j];
				s[j]=s[j+1];
				s[j+1]=t;
			}
			else if(s[j].zl==s[j+1].zl)//再对价格排序
			{
				if(s[j].jg<s[j+1].jg)
				{
					t=s[j];
					s[j]=s[j+1];
					s[j+1]=t;
				}
			} 
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%d %d\n",s[i].zl,s[i].jg);
	}
}

I - 共用体练习

#include<stdio.h>
#include<string.h>
union undata
{
	int a;
	double b;
	char c[25];
}u[100005];
char s[100005][25];
int main()
{
	int n,m,i,x;
	scanf("%d %d",&n,&m);
	for(i=0;i<n;i++)
	{
		scanf("%s",s[i]);
		if(strcmp("INT",s[i])==0) scanf("%d",&u[i].a);
		else if(strcmp("DOUBLE",s[i])==0) scanf("%lf",&u[i].b);
		else if(strcmp("STRING",s[i])==0) scanf("%s",&u[i].c);
	}
	for(i=0;i<m;i++)
	{
		scanf("%d",&x);
		if(strcmp("INT",s[x])==0) printf("%d\n",u[x].a);
		else if(strcmp("DOUBLE",s[x])==0) printf("%.2lf\n",u[x].b);
		else if(strcmp("STRING",s[x])==0) printf("%s\n",u[x].c);
	}
}

J - 简单枚举类型——植物与颜色

#include<string.h>
#include<stdio.h>
int main()
{
	int n,i; 
	char s[50];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",s);
		if( strcmp(s,"red") == 0 )
		printf("Rose are red.\n");
		else if( strcmp(s,"orange") == 0 )
		printf("Poppies are orange.\n");
		else if( strcmp(s,"yellow") == 0)
		printf("Sunflower are yellow.\n");
		else if( strcmp(s,"green") == 0 )
		printf("Grass are green.\n");
		else if( strcmp(s,"blue") == 0 )
		printf("Bluebells are blue.\n");
		else if( strcmp(s,"violet") == 0 )
		printf("Violets are violet.\n");
		else
		printf("I don't know about the color %s.\n",s);
	}
	return 0;
}

不懂得可以私信我,随时解答。
程序有错误请私信我,以及时改正。感谢!

你可能感兴趣的:(acm,算法)