声明:以下代码仅供参考,并非最优代码。欢迎各大佬在评论区优化指正。
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;
}