xdoj2023期末考试练习题库的一些样例

声明:以下代码仅供参考,并非最优代码。欢迎各大佬在评论区优化指正。

1.方差计算

#include<stdio.h>
int main()
{
	int n,i;
	double a[1000],sum=0,ave,p=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		{scanf("%lf",&a[i]);sum+=a[i];}
		
	ave=sum/n;
	
	for(i=0;i<n;i++)
		{p+=(a[i]-ave)*(a[i]-ave);}
		
	printf("%d",int(p/n));
	return 0;
}

2.计算正弦函数  

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,j,m=1;
	double x,s,sum=0;
	scanf("%d %lf",&n,&x);
	for(i=1;i<n+1;i++)
		{
			s=pow(-1,i+1)*(pow(x,double(2*i-1)))/tgamma(2*i);
			sum+=s;
		}
		printf("%.4lf",sum);
	return 0;
}

3.判断同构数

#include<stdio.h>
#include<math.h>
int main()
{
	int i,n,t=0,m;
	scanf("%d",&n);
	for(i=0;;i++)
	{
		if(n>=pow(10,i)&&n<=pow(10,i+1))
		{
			m=i+1;break;
		}
	}
	if((n*n)%int(pow(10,m))==n)
	{printf("%d 1",n);}
	else
	{printf("%d 0",n);}
	return 0;
}

4.信号解调

#include<stdio.h>
int sq (int m,int n)
{
	int t;
	int dis1=(m-3)*(m-3)+(n-4)*(n-4);
	int dis2=(m+3)*(m+3)+(n+4)*(n+4);
	if(dis1<dis2) t=1;
	else  t=2;
	return t;
}

int main()
{
	int n,i,a[1000];
	scanf("%d",&n);
	for(i=0;i<2*n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<2*n-1;i+=2)
	{
		printf("%d ",sq(a[i],a[i+1]));
	}
	return 0;
}

5.可构造三角形数量

#include<stdio.h>
int tri(int a,int b,int c)
{
	int t=0;
	if(a+b>c && a+c>b && b+c>a)
	{t=1;}
	else
	{t=0;}
	return t;
}
int main()
{
	int n,i,num=0,a[1000];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<n-2;i++)
	{num+=tri(a[i],a[i+1],a[i+2]);}
	printf("%d",num);
	return 0;
}

6.ROT13加密

#include<stdio.h>
int main()
{
	char str[60]="\0";
	gets(str);
	for(int i=0;i<60;i++)
	{
		if(str[i]>=65&&str[i]<=77) printf("%c",str[i]+13);
		else if(str[i]>=78&&str[i]<=90) printf("%c",str[i]-13);
		else if(str[i]>=97&&str[i]<=109) printf("%c",str[i]+13);
		else if(str[i]>=110&&str[i]<=122) printf("%c",str[i]-13);
		else printf("%c",str[i]);
	}
	return 0;
}

7.勒让德多项式

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i;
	double x,p[1000],sum=0.0;
	scanf("%d %lf",&n,&x);
	p[0]=1;p[1]=x;
	sum=p[1];
	for(i=2;i<n+1;i++)
	{
		p[i]=((2*i-1)*x*p[i-1]-(i-1)*p[i-2])/i;
		sum+=p[i];
	}
	printf("%.4lf",sum);
	return 0;
} 

8.函数的最大值

#include<stdio.h>
#include<math.h>
double f(double x,double a)
{
	double t=-x*x*x+a*x*x;
	return t;
}
int main()
{
	double a,max,i=0.0;
	scanf("%lf",&a);
	max=f(0.0,a);
	while(i<=10)
	{
		if(f(i,a)>max)
		{
			max=f(i,a);
		}
		i+=0.0001;
	}
	printf("%.2lf",max);
	return 0;
} 

9.模式匹配

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	for(i=0;i<n-2;i++)
	{
		if(a[i]=3&&a[i+1]==5&&a[i+2]==7)
		sum+=1;
	}
	printf("%d",sum);
	return 0;
} 

10.判断梅森尼数

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,j,t=1;
	scanf("%d",&n);
	double m=pow(2,n)-1;
	for(i=2;i<m;i++)
	{
		if(int(m)%i==0) t=0;
	}
	if(t==1) printf("%d 1",int(m));
	else printf("%d 0",int(m));
	return 0;
} 

11.平滑滤波

#include <stdio.h>
#include <math.h>
int main()
{
    int *p,*q,n,a[1000],i=0,b[1000],ave;
    scanf("%d",&n);
    p=a;
    q=a;
    while(i<n)
    {
        scanf("%d",&(*p));
        p++;
        i++;
    }
    int j=0;
    while(j<n)
    {
        if(j==0)
        {ave=(*q + *(q+1) +*(q+2))/3;}
        else if(j==n-1)
        {ave=(*q + *(q-1) +*(q-2))/3;}
        else
        {ave=(*q + *(q-1) +*(q+1))/3;}
        b[j]=ave;
        q++;
        j++;
    }
    for(i=0;i<n;i++)
        printf("%d ",b[i]);
    return 0;
}

12.logistic方程

#include<stdio.h>
#include<math.h>
int main()
{
	double r,lo[1200];
	int i,t=0,f;
	scanf("%lf %lf",&lo[1],&r);
	for(i=2;i<1001;i++)
	{lo[i]=r*lo[i-1]*(1-lo[i-1]);}
	for(i=2;i<1001;i++)
	{if(fabs(lo[i]-lo[i-1])<0.00001) {t=1;f=i;break;}}
	if(t==1) printf("%.4lf 1",lo[f]);
	else printf("%.4lf 0",lo[1000]);
	return 0;
} 

13.删除特定字符并排序输出

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	char str1[120],str2[120],t;
	gets(str1);
	int i,j,k=0;
	for(i=0;i<strlen(str1);i++)
	{
		if(str1[i]!='*') {str2[k++]=str1[i];}
	}
	str2[k] = '\0';
	
            
    for(i=1;i<strlen(str2);++i)
{                 


    for(j=0;j<strlen(str2)-i;++j)
    {
        if(str2[j]>str2[j+1])
        {
            t=str2[j];
            str2[j]=str2[j+1];
        	str2[j+1]=t;
        }
    }

}

	for(j=0;j<strlen(str2);j++)
		{printf("%c",str2[j]);}
	return 0;
} 

14.校验和

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],j,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	for(i=0;i<n;i++)
	{
		for(j=5;j>=0;j--)
		{
			sum+=a[i]/int(pow(10,j));
			a[i]=a[i]%int(pow(10,j));
		}
	}
	printf("%d",sum%10);
	return 0;
}

15.数值信息报表

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],sum=0,max,min,t1=1,t2=1;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	max=a[0];
	min=a[0];
	for(i=0;i<n;i++)
	{
		sum+=a[i];
		if(a[i]>=max) {max=a[i];t1=i+1;}
		else if(a[i]<=min) {min=a[i];t2=i+1;}
		
	}
	printf("%d %d %d %d %d",sum,max,t1,min,t2);
	return 0;
}

16.出现次数最多的数

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1500],b[1500],j,c[1500],max,o;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);c[i]=a[i];b[i]=1;}
	for(i=0;i<n;i++)
	{
		if(a[i]>0)
		{
			for(j=0;j<n;j++)
			{
				if(i!=j&&a[i]==a[j]){b[i]+=1;a[j]=0;}
				else continue;
			}
		}
		else if(a[i]==0) b[i]--;
	}
	max=b[0];
	for(i=0;i<n;i++)
	{
		if(b[i]>max){max=b[i];}
	}
	for(i=0;i<n;i++)
	{
		if(b[i]==max){o=i;break;}
	}
	printf("%d",c[o]);
	return 0;
}

17.寻找同数

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	char m[5],s[100];
	int i,t=0;
	gets(m);
	gets(s);
	switch(strlen(m))
	{
		case 1: {for(i=0;i<strlen(s);i++)
					{if(s[i]==m[0]) t++;} break;}
		case 2: {for(i=0;i<strlen(s)-1;i++)
					{if(s[i]==m[0]&&s[i+1]==m[1]) t++;}break;}
		case 3: {for(i=0;i<strlen(s)-2;i++)
					{if(s[i]==m[0]&&s[i+1]==m[1]&&s[i+2]==m[2]) t++;}break;}		
	}
	printf("%d",t);
	
	return 0;
}

18.数字个数统计2

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,ji=0,ou=0,s=0,max;
	scanf("%d",&n);
	for(i=n;i<n*n+1;i++)
	{if(i%2==0) ou++;
	 else if(i%2==1) ji++;}
	for(i=n;i<n*n+1;i++)
	{if(i%4==0&&i%3!=0) s++;}
	printf("%d %d %d\n",ji,ou,s);
	max=ji+ou;
	if(ji+s>max) max=ji+s;
	if(ou+s>max) max=ou+s;
	printf("%d",max);
	return 0;
}

19.数列折半交换

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],t;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	if(n%2==1)
	{
		for(i=0;i<(n+1)/2-1;i++)
		{
			t=a[i];
			a[i]=a[i+(n+1)/2];
			a[i+(n+1)/2]=t;
		}
	}
	else
	{
		for(i=0;i<n/2;i++)
		{
			t=a[i];
			a[i]=a[i+n/2];
			a[i+n/2]=t;
		} 
	} 
	for(i=0;i<n;i++)
	{printf("%d ",a[i]);}
	return 0;
}

20.数字个数统计3

#include<stdio.h>
#include<math.h>
int main()
{
	int m,n,i,min,max,a1=0,a2=0,a3=0,v[100],max0;
	scanf("%d %d",&m,&n);
	max=m>n?m:n;
	min=m<n?m:n;
	for(i=min;i<=max;i++)
	{
		if(i%3==0) a1++;
		if(i%4==0) a2++;
		if(i%5==0&&i%2!=0) a3++;
	}
	v[0]=a1%a2;v[1]=a2%a1;
	v[2]=a1%a3;v[3]=a3%a1;
	v[4]=a2%a3;v[5]=a3%a2;
	max0=v[0];
	for(i=0;i<6;i++)
	{if(v[i]>max0) {max0=v[i];}}
	printf("%d %d %d\n",a1,a2,a3);
	printf("%d",max0);
	return 0;
}

21.有序序列插值

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],m,j,num,k,t;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	scanf("%d",&m);
	a[n]=m;
	num=n+1;
	for(i=0;i<num-1;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(a[j]<a[i])
			{
				t=a[j];
				a[j]=a[i];
				a[i]=t;
			}
		}
	}
	for(i=0;i<num;i++)
	printf("%d ",a[i]);
	return 0;
}

22.数字统计

#include<stdio.h>
#include<math.h>
int f(int n)
{
	if(n==1) return 2;
	else if(n==2) return 3;
	else if(n>2) return (n-1)*(n-1)+3*(n-2)+1;
}
int main()
{
	int m,i,a0=0,a1=0,a2=0,k;
	scanf("%d %d",&m,&k);
	for(i=1;i<k+1;i++)
	{
		if(f(i)%m==0) a0++;
		else if(f(i)%m==1) a1++;
		else if(f(i)%m>1) a2++;
	}
	printf("%d %d %d",a0,a1,a2);
	return 0;
}

23.等差数列及位置指示

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],j,t,cha,p=0,max,min,b[1000];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);b[i]=a[i];}
	
	
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>a[j]){t=a[j];a[j]=a[i];a[i]=t;}
		}
	}
	
	
	cha=a[1]-a[0];max=cha;min=cha;
	for(i=0;i<n-1;i++)
		{
			if(a[i+1]-a[i]>max)
				{p=1;max=a[i+1]-a[i];}
		}
	for(i=0;i<n-1;i++)
		{
			if(a[i+1]-a[i]<min)
				{p=1;min=a[i+1]-a[i];}
		}
		
		
	if(p==1) {printf("%d %d",max,min);}
	else if(p==0) 
	{
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				if(a[i]==b[j])
				{
					printf("%d ",j+1);
				}
			}
		}
	}

	return 0;
}

24.交换最大值与最小值

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],max,min;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	max=a[0];min=a[0];
	for(i=0;i<n;i++)
	{
		if(a[i]>max) {max=a[i];}
		if(a[i]<min) {min=a[i];}
	}
	for(i=0;i<n;i++)
	{
		if(a[i]==max) {max=a[i];a[i]=a[n-1];a[n-1]=max;}
		if(a[i]==min) {min=a[i];a[i]=a[0];a[0]=min;}
	}
	for(i=0;i<n;i++)
	printf("%d ",a[i]);
	return 0;
}

25.新出租车计费

#include<stdio.h>
#include<math.h>
int main()
{
	float s,ts,tm;
	int m;
	scanf("%f %d",&s,&m);
	if(s<=3) {ts=10;}
	else if(s>3&&s<=10) {ts=10+2*(s-3);}
	else {ts=10+7*2+3*(s-10);}
	tm=m/5*2;
	printf("%.1f",ts+tm);
	return 0;
}

26.乘法口诀数列

#include<stdio.h>
#include<math.h>
int main()
{
	int a1,a2,n,s[1000],ji,t=1,sum=2,k=3;
	scanf("%d %d %d",&a1,&a2,&n);
	s[1]=a1;s[2]=a2;
	while(sum<=n)
	{
		ji=s[t]*s[t+1];
		if(ji>9){s[k]=ji/10;s[k+1]=ji%10;sum+=2;k+=2;}
		else if(ji<10) {s[k]=ji;sum++;k++;}
		t++;
	}
	for(int i=1;i<=n;i++)
	{printf("%d ",s[i]);}
	return 0;
}

27.歌唱比赛评分

#include<stdio.h>
#include<math.h>
int main()
{
	int n,m,i,a[1000],max,min,sum=0,l;
	scanf("%d %d",&n,&m);
	l=n;
	for(i=1;i<=n;i++)
	{scanf("%d",&a[i]);}
	max=a[1];min=a[1];
	for(i=1;i<=n;i++)
		{if(a[i]>max) max=a[i];
		else if(a[i]<min) min=a[i];}
	for(i=1;i<=n;i++)
		{if(a[i]==max&&a[m]!=max){a[i]=0;l--;break;}}
	for(i=1;i<=n;i++){if(a[i]==min&&a[m]!=min){a[i]=0;l--;break;}}
	
	for(i=1;i<=n;i++)
	{sum+=a[i];}
	float score=float(sum)/float(l);
	printf("%.2f",score); 
	return 0;
}

28.分别计算奇数和偶数之和

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,ji=0,ou=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		if(i%2==0) ou+=i;
		else ji+=i;
	}
	printf("%d %d",ji,ou);
	return 0;
}

29.异常点检测

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,sum2=0;
	double a[1000],sum=0,ave,s=0,sum1=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%lf",&a[i]);}
	for(i=0;i<n;i++)
	{sum+=a[i];}
	ave=sum/float(n);
	for(i=0;i<n;i++)
	{sum1+=(a[i]-ave)*(a[i]-ave);}
	s=sqrt(sum1/double(n-1));
	for(i=0;i<n;i++)
	{
		if(a[i]>ave+3*s||a[i]<ave-3*s)
		sum2++;
	}
	printf("%.4lf %d",s,sum2);
	return 0;
}

30.最长的整数序列

#include<stdio.h>
#include<math.h>
int main()
{
	int n,j,i,a[1000],t,b[1000],k=0,max;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);b[i]=0;}
	for(i=0;i<n;i++)
	{
		if(a[i]==a[i+1])
		{b[k]++;}
		else 
		{b[k]++;k++;}
	}
	max=b[0];
	for(i=0;i<n;i++)
	{if(b[i]>max) max=b[i];}
	printf("%d",max);
	return 0;
}

31.最小公倍数求和

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i,a[1000],j,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);}
	for(i=0;i<n-1;i++)
	{
		for(j=1;j<=a[i]*a[i+1];j++)
		{
			if(j%a[i]==0&&j%a[i+1]==0)
				{sum+=j;break;}
		}
	}
	printf("%d",sum);
	return 0;
}

32.字符串处理1

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{	
	char a[1000];
	gets(a);
	int i,t=0,m,b[1000],sum=0;
	for(i=0;i<strlen(a);i++)
	{	
		b[i]=0;
		if(int(a[i])>=65&&int(a[i])<=70)
		{t=1;b[i]=int(a[i])-55;}
		else if(int(a[i])>=48&&int(a[i])<=57)
		{t=1;b[i]=int(a[i])-48;}
		else if(int(a[i])>=97&&int(a[i])<=102)
		{t=1;b[i]=int(a[i])-87;}
	}
	if(t==1)
	{
		for(i=0;i<strlen(a);i++)
		{sum+=b[i];}
		printf("%d",sum);
	}
	else
	{printf("NO");}
	return 0;
}

33.数组折叠

#include<stdio.h>
#include<math.h>
int main()
{
	int n,m,i,a[1000],j;
	scanf("%d %d",&n,&m);
	for(i=0;i<int(pow(2,n));i++)
	{scanf("%d",&a[i]);}
	
	for(i=1;i<=m;i++)
	{
		for( j=0;j<int(pow(2,n))/int(pow(2,i));j++)
		{
			a[j]=a[j]+a[int(pow(2,n-i+1)-1-j)];
		}
	}
	for(i=0;i<int(pow(2,n))/int(pow(2,m));i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

34.字符串插入

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	int i,n,j=0,k=0;
	char str1[1000],str2[1000],str[1000];
	gets(str1);
	gets(str2);
	scanf("%d",&n);
	for(i=0;i<=n-1;i++)
	{str[i]=str1[i];}
	for(i=n,j=0;i<=n+strlen(str2)-1;i++,j++)
	{str[i]=str2[j];}
	for(i=n+strlen(str2),k=n;i<=strlen(str1)+strlen(str2)-1;i++,k++)
	{str[i]=str1[k];}
	for(i=0;i<strlen(str1)+strlen(str2);i++)
	printf("%c",str[i]);
	return 0;
}

35.判断字符串子串

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	char fu[1000],zi[1000],*p,*p0=&fu[0];
	gets(fu);
	gets(zi);
	int i,j,t[1000]={0};
	p=strstr(fu,zi);
	if (p == NULL)
	printf("No!");
	else
	printf("%d",p-p0+1);
	return 0;
}

36.奇偶求和

#include<stdio.h>
int a(int n)
{return 3*(n-1)*(n-1)+2*(n-1)+1;}
int main()
{
	int m,i=1,sum_even=0,sum_odd=0,even=0,odd=0;
	scanf("%d",&m);
	
	for(i=1;;i++)
	{
		if(a(i)>100&a(i)%2==0)
		{
			sum_even+=a(i);
			even++;
		}
		if(even==m) break;
	}
	
		for(i=1;;i++)
	{
		if(a(i)>100&a(i)%2==1)
		{
			sum_odd+=a(i);
			odd++;
		}
		if(odd==m-1) break;
	}
	printf("%d %d",sum_even,sum_odd);
	return 0;
} 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值