算法总结

大数阶乘
#include<stdio.h>
int main()
{
int a[100001];
a[0]=1;
int m,i,j,k,t;
k=1;
scanf("%d",&m);
for(i=2;i<=m;i++)
{
int num=0;
for(j=0;j<k;j++)
{
t=a[j]i+num;
a[j]=t%10;
num=t/10;
}
while(num)
{
a[k]=num%10;
num/=10;
k++;
}
}
for(i=k-1;i>=0;i–)
printf("%d",a[i]);
printf("\n");
return 0;
}
街区最短路径问题
#include<stdio.h>
#include<math.h>
void sort(int a[],int m)
{
int t,i,j;
for(i=1;i<m;i++)
{
j=i-1;
t=a[i];
while(j>=0&&t<a[j])
{
a[j+1]=a[j];
j–;
}
a[j+1]=t;
}
}
int main()
{
int n,m;
scanf("%d",&n);
while(n–)
{
int i,sum;
scanf("%d",&m);
int a[m],b[m];
for(i=0;i<m;i++)
scanf("%d %d",&a[i],&b[i]);
sort(a,m);
sort(b,m);
for(i=0,sum=0;i<m/2;i++)
{
sum+=(a[m-1-i]-a[i]+b[m-1-i]-b[i]);
}
printf("%d\n",sum);
}
return 0;
}
众数问题
#include<stdio.h>
int main()
{int n;
int a[100],b[100];
scanf("%d",&n);
while(n–)
{int m,t,ans,max,j,i;
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
{
ans=1;
for(j=i+1;j<m;j++)
{if(a[i]==a[j])
{
ans++;
}
}b[i]=ans;
}
max=0;
for(i=0;i<m;i++)
{
if(b[i]>max)
{max=b[i];
t=a[i];
}
}
printf("%d %d\n",t,max);
}
return 0;
}
成绩转换
#include<stdio.h>
int main()
{
int T,n,m,t;
scanf("%d",&T);
while(T–)
{
scanf("%d",&n);
if(n>100||n<0)
return 0;
t=n/10;
if(t<6&&t>=0)
{
printf(“E\n”);
continue;
}
else
{
switch(t)
{
case 10:printf(“A\n”);continue;
case 9:printf(“A\n”);continue;
case 8:printf(“B\n”);continue;
case 7:printf(“C\n”);continue;
case 6:printf(“D\n”);continue;
}
}
}
return 0;
}
喷水装置
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,i,j,k;
scanf("%d",&m);
while(m–)
{
scanf("%d",&n);
float a[n],b,t,l;
for(i=0;i<n;i++)
scanf("%f",&a[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
l=a[i];
a[i]=a[j];
a[j]=l;
}
}
for(i=0,b=0.0;i<n;i++)
{
b+=2
sqrt(pow(a[i],2)-1.0);
if(b>=20.0)
break;
}
printf("%d\n",i+1);
}
}
求转置矩阵问题
#include<stdio.h>
int main()
{
int i,j,N,n;
scanf("%d",&N);
int b[9];
while(N–)
{
for(i=0;i<9;i++)
{
scanf("%d",&b[i]);
}
for(j=0;j<3;j++)
printf("%d %d %d\n",b[j],b[j+3],b[j+6]);
printf("\n");
}
return 0;
}
cigarettes算法
#include<stdio.h>
int main()
{
int n,k,N;
scanf("%d",&N);
while(N–)
{
int i,j,b=0,sum=0,yt=0;
scanf("%d %d",&n,&k);
while(n)
{
sum+=n;
yt=n+b;
n=yt/k;
b=yt%k;
}
printf("%d\n",sum);
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值