直接上题。
传送门
P-0193 歌唱比赛
#include<stdio.h>
int main(){
int n,a,min=100,max=0,sum=0;
scanf("%d",&n);
if(n>=3&&n<=10){
for(int i=0;i<n;i++){
scanf("%d",&a);
if(a<min){
min=a;
}
if(a>max){
max=a;
}
sum+=a;
}
sum=sum-max-min;
double avg=(double)sum/(n-2);
printf("%.2lf",avg);
}
return 0;
}
P-0200 数组元素平移
//xdoj0200.c
#include<stdio.h>
int main(){
int array[10]={1,2,3,4,5,6,7,8,9,10};
int p;
scanf("%d",&p);
if(p>=0&&p<10){
for(int i=p+1;i<10;i++){
printf("%d ",array[i]);
}
for(int i=0;i<=p;i++){
printf("%d ",array[i]);
}
}
return 0;
}
P-0201 后项除以前项
//xdoj0201.c
#include<stdio.h>
int main(){
int a[10];
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
if(i>=1){
printf("%d ",a[i]/a[i-1]);
}
}
return 0;
}
P-0204 单词统计
//xdoj0204.c
//oj似乎有某种问题
#include<stdio.h>
#include<string.h>
const int N=101;
const int M=9;
int main(){
char str[N]={'\0'},word[M]={'\0'},words[N][N];
int count=0;
gets(str);
gets(word);
int len=strlen(str),len1=strlen(word);
if(len1>8){
return 0;
}
int r=0,c=0;
for(int i=0;i<len;i++){
if(str[i]==' '){
words[r][c]='\0';
r++;
c=0;
}else{
words[r][c++]=str[i];
}
}
for(int i=0;i<=r;i++){
if(strcmp(word,words[i])==0){
count++;
}
}
printf("%s %d",word,count);
return 0;
}
P-0206 字符删除
//xdoj0206.c
#include<stdio.h>
#include<string.h>
const int N=51;
int main(){
char str[N];
gets(str);
char c;
c=getchar();
int len=strlen(str);
for(int i=0;i<len;i++){
if(str[i]!=c){
printf("%c",str[i]);
}
}
return 0;
}
P-0207 单词排序 (P-0244一模一样)
//xdoj0207.c 0244
//xdoj0244.c
#include<stdio.h>
#include<string.h>
//选择排序 和 冒泡排序分别过不了编号为 795和 797的例子
//也不知道是不是不稳定排序的问题
//题目貌似也没说明首字母一样的情况怎么排序
void wd_sort(char str[][20],int N){
int i,j,flag,temp;
char t[20];
for(i=0;i<N;i++){
for(j=0;j<N-1;j++){
if(str[j][0]>str[j+1][0]){
//利用strcpy进行 整行换行
strcpy(t,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],t);
}
}
}
}
//也可以if strcmp(str[min][0],str[j][0])==1
int main(){
char str[10][20]={'\0'};
int N;
scanf("%d",&N);
if(N>0&&N<=10){
printf("\n");
for(int i=0;i<N;i++){
scanf("%s",&str[i]);
}
wd_sort(str,N);
for(int i=0;i<N;i++){
puts(str[i]);
printf("\n");
}
}
return 0;
}
P-0208 奇偶排序
//xdoj0208.c
#include<stdio.h>
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
void sort(int *num,int length){
int i,j,min;
for(i=0;i<length-1;i++){
for(j=i,min=i;j<length;j++){
if(num[min]>num[j]){
min=j;
}
}
if(min!=i){
swap(&num[i],&num[min]);
}
}
}
int main(){
int n,t,evennum[20],oddnum[20],j=0,k=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&t);
if(t%2==0){
evennum[j++]=t;
}else{
oddnum[k++]=t;
}
}
sort(evennum,j);
sort(oddnum,k);
for(int i=0;i<k;i++){
printf("%d ",oddnum[i]);
}
printf(" ");
for(int i=0;i<j;i++){
printf(" %d",evennum[i]);
}
return 0;
}
P-0209 字符拷贝
//xdoj0209.c
#include<stdio.h>
#include<string.h>
int main(){
char str[50];
gets(str);
int m;
scanf("%d",&m);
int len=strlen(str);
for(int i=m+1;i<len;i++){
printf("%c",str[i]);
}
return 0;
}
P-0210 最值交换
//xdoj0210.c 题目输出样例有错
#include<stdio.h>
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
void change(int *num,int length){
int max=0,min=0;
for(int i=1;i<length;i++){
if(num[i]>num[max]){
max=i;
}
if(num[i]<num[min]){
min=i;
}
}
swap(&num[min],&num[max]);
}
int main(){
int num[20];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
change(num,n);
for(int i=0;i<n;i++){
printf("%d ",num[i]);
}
return 0;
}
P-0224 矩阵相乘
//xdoj0224.c xdoj0162一样
#include<stdio.h>
int main(){
int a[2][3];
int b[3][2];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
scanf("%d",&b[i][j]);
}
}
int c1=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0];
int c2=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1];
int c3=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0];
int c4=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1];
printf("%d %d\n%d %d",c1,c2,c3,c4);
return 0;
}
P-0225 矩阵计算
//xdoj0225.c
#include<stdio.h>
int main(){
int mat[3][3],matt[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
scanf("%d",&mat[i][j]);
matt[i][j]=mat[i][j];
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
matt[i][j]=mat[i][j]+mat[j][i];
printf("%d ",matt[i][j]);
}
printf("\n");
}
return 0;
}
P-0226 字符数组元素排序
//xdoj0226.c
#include<stdio.h>
#include<string.h>
int main(){
char str[100];
gets(str);
int len=strlen(str);
int i,j,min,t;
for(i=0;i<len-1;i++){
for(j=i,min=i;j<len;j++){
if(str[min]>str[j]){
min=j;
}
}
if(min!=i){
int t=str[min];
str[min]=str[i];
str[i]=t;
}
}
for(int i=0;i<len;i++){
printf("%c",str[i]);
}
return 0;
}
P-0238 数组鞍点 (GBK编码)
#include<stdio.h>
int main(){
int num[4][5];
int rmax[4],cmin[5];
int t=0,i,j;
for(i=0;i<4;i++){
t=-2147483648;
for(j=0;j<5;j++){
scanf("%d",&num[i][j]);
if(t<num[i][j]){
t=num[i][j];
rmax[i]=j;
}
}
}
//2^31-1
for(i=0;i<5;i++){
t=2147483647;
for(j=0;j<4;j++){
if(num[j][i]<t){
t=num[j][i];
cmin[i]=j;
}
}
if(i==rmax[cmin[i]]){
printf("%d %d %d",num[cmin[i]][rmax[cmin[i]]],cmin[i]+1,rmax[cmin[i]]+1);
return 0;
}
}
printf("鞍点不存在");
return 0;
}
P-0239 杨辉三角
//xdoj0239.c
#include<stdio.h>
int Cnm(int n,int m){//组合数
if(m==0||m==n){
return 1;
}
int n1=n;
int m1=m;
for(int i=n-m+1;i<n;i++){
n1*=i;
}
for(int i=1;i<m;i++){
m1*=i;
}
return n1/m1;
}
int main(){
int n;
scanf("%d",&n);
if(n>=2&&n<=10){
printf("1\n");//第一行
for(int i=1;i<n;i++){
for(int j=0;j<=i;j++){
printf("%d ",Cnm(i,j));
}
printf("\n");
}
}
return 0;
}
P-0250 螺旋填数
//xdoj0250.c
#include<stdio.h>
int main(){
int nums[100][100]={0},n,m,count=1,r=0,c=0;
scanf("%d%d",&n,&m);
int total=n*m;
//四个边界 Right Left Up Down
int Rlimit=m,Llimit=0,Ulimit=0,Dlimit=n;
//理解为n次螺旋填数,每次填完,边界缩小
while(count<=total){
while(c<Rlimit){
nums[r][c++]=count++;
}c--;r++;
while(r<Dlimit){
nums[r++][c]=count++;
}r--;c--;
while(c>=Llimit){
nums[r][c--]=count++;
}c++;r--;
while(r>Ulimit){
nums[r--][c]=count++;
}r++;c++;
//每次螺旋之后,边界缩小
Rlimit--;Llimit++;Ulimit++;Dlimit--;
}
//输出
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",nums[i][j]);
}
printf("\n");
}
return 0;
}
结构体部分
P-0242 成绩统计
//xdoj0242.c
#include<stdio.h>
int main(){
struct student{
int idnum;
char name[20];
double s1;
double s2;
double s3;
double avg;
};
int n;
scanf("%d",&n);
struct student stu[100];
for(int i=0;i<n;i++){
scanf("%d %s %lf %lf %lf",&stu[i].idnum,&stu[i].name,&stu[i].s1,&stu[i].s2,&stu[i].s3);
stu[i].avg=(stu[i].s1+stu[i].s2+stu[i].s3)/3;
}
int i,j,max;
struct student t;
for(i=0;i<n-1;i++){
for(j=i,max=i;j<n;j++){
if(stu[max].avg<stu[j].avg){
max=j;
}
}
if(max!=i){
t=stu[i];
stu[i]=stu[max];
stu[max]=t;
}
}
for(int i=0;i<n;i++){
printf("%d %s %.1lf\n",stu[i].idnum,stu[i].name,stu[i].avg);
}
return 0;
}
P-0243 考试排名
//xdoj0243.c
#include<stdio.h>
int main(){
typedef struct stu{
char name[20];
int s[5];
int plus;
int sum;
}STU;
int n;
scanf("%d",&n);
STU info[100];
for(int i=0;i<n;i++){
scanf("%s %d %d %d %d %d %d",&info[i].name,&info[i].s[0],&info[i].s[1],&info[i].s[2],&info[i].s[3],&info[i].s[4],&info[i].plus);
info[i].sum=info[i].s[0]+info[i].s[1]+info[i].s[2]+info[i].s[3]+info[i].s[4]+info[i].plus;
}
int i,j,max;
STU t;
for(i=0;i<n-1;i++){
for(j=i,max=i;j<n;j++){
if(info[max].sum<info[j].sum){
max=j;
}else if(info[max].sum==info[j].sum){
max=info[max].plus>info[j].plus?max:j;
}
}
if(max!=i){
t=info[max];
info[max]=info[i];
info[i]=t;
}
}
for(int i=0;i<n;i++){
printf("%s %d %d\n",info[i].name,info[i].sum,info[i].plus);
}
}
P-0251 年月日统计
//xdoj0251.c
#include<stdio.h>
int main(){
typedef struct date{
int year;
int month;
int day;
}DATE;
DATE input;
scanf("%d,%d,%d",&input.year,&input.month,&input.day);
int sum;
switch (input.month) // 先计算某月以前月份的总天数
{
case 1:sum = 0;
break;
case 2:sum = 31;
break;
case 3:sum = 59;
break;
case 4:sum = 90;
break;
case 5:sum = 120;
break;
case 6:sum = 151;
break;
case 7:sum = 181;
break;
case 8:sum = 212;
break;
case 9:sum = 243;
break;
case 10:sum = 273;
break;
case 11:sum = 304;
break;
case 12:sum = 334;
break;
}
sum = sum + input.day;
int leap;
if (input.year % 400 == 0 || (input.year % 4 == 0 && input.year % 100 != 0)) {
leap = 1;
} else {
leap = 0;
}
if (leap == 1 && input.month > 2) { // 如果是闰年且月份大于2,总天数应该加一天
sum++;
}
printf("%d",sum);
return 0;
}
最后
感兴趣的可以关注我的微信公众号,第一时间收到动态