先冒泡排序,再将最大的与最小的相加,如果小于就一起,大于就只取大值,直到送完
#include<stdio.h>
int main()
{
int w,n,a[100000],t,zhu=0;
scanf("%d",&w);
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
int j=0;
for(int i=0;i<n-2-j;i++)
{
if(a[i]+a[n-1-j]>w)
{
zhu++;
}
if(a[i]+a[n-1-j]<=w)
{
zhu++;
j++;
}
}
printf("%d",zhu);
}
直接存字符串,然后减下标
#include<stdio.h>
#include<math.h>
#include<string.h>
char a[27];
int main()
{
int n,sj,x,l[51],y,z;
char b[51];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
sj=0;
scanf("%s",a);
scanf("%s",b);
x=strlen(b);
for(int j=0;j<x;j++)
{
for(int k=0;k<26;k++)
if(b[j]==a[k])
l[j]=k;
}
for(int j=1;j<x;j++)
{
sj+=abs(l[j]-l[j-1]);
}
printf("%d\n",sj);
}
}
如果相同就都输出1;如果不同就输出与最大值的差加一,最大值输出0。
#include<stdio.h>
int piao(int x,int y,int z)
{
int n=0,k=y,l;
if(y<z)
k=z;
if(x>k)
l=0;
if(x<=k)
l=k+1-x;
return l;
}
int main()
{
int n,a,b,c;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&a,&b,&c);
printf("%d %d %d\n",piao(a,b,c),piao(b,c,a),piao(c,b,a));
}
}
用数组排序,然后输出下标;注意负数
#include<stdio.h>
#include<string.h>
int main()
{
int x[10]={0},a;
char y[19];
scanf("%s",y);
a=strlen(y);
if(y[0]=='-')
for(int i=1;i<a;i++)
{
x[y[i]-'0']++;
}
else
for(int i=0;i<a;i++)
{
x[y[i]-'0']++;
}
if(y[0]=='-')
{
printf("-");
for(int i=1;i<=9;i++)
{
if(x[i]){
for(int j=0;j<x[i];j++)
printf("%d",i);
}
}
}
else
{
for(int i=9;i>=0;i--)
{
if(x[i]){
for(int j=0;j<x[i];j++)
printf("%d",i);
}
}
}
return 0;
}
饮料数等于n/2.
#include<stdio.h>
int main()
{
int n,a,sum;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
sum=a/2;
printf("%d\n",sum);
}
}
按网的面积一个一个算然后比较大小
#include<stdio.h>
int main()
{
int n,m,a[516][516],sum1,sum2;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
for(int k=0;k<m;k++)
for(int i=0;i<m;i++)
sum1+=a[k][i];
if(n<=m)
printf("%d",sum1);
else
{
for(int j=0;j<n;j++)
for(int l=0;l<n;l++)
{
sum2=0;
for(int k=j;k<m+j;k++)
{
for(int i=l;i<m+l;i++)
{
sum2+=a[k][i];
}
}
if(sum1<sum2)
sum1=sum2;
}
printf("%d",sum1);
}
return 0;
}
先算出每种沙的单价,然后按单价大小购买沙子
#include<stdio.h>
int main()
{
int n,m;
double a[1000],x[1000],y[1000],c=0,t,b=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%lf %lf",&x[i],&y[i]);
a[i]=y[i]/x[i];
}
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1-i;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
t=x[j];
x[j]=x[j+1];
x[j+1]=t;
t=y[j];
y[j]=y[j+1];
y[j+1]=t;
}
}
int i=0,k=0;
while(n--)
{
c+=x[i++];
b+=y[k++];
if(m-c<0)
break;
}
if(m-c<0)
{
c-=x[i-1];
b-=y[i-1];
b+=a[i-1]*(m-c);
}
printf("%.2lf",b);
return 0;
}
用for循环相加会超时,要用数组存相加后的值,然后用区域后的值减;
#include<stdio.h>
int a[100000]={0};
int main()
{
int n,m,l,r,d;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&d);
a[i]=a[i-1]+d;
}
for(int i=0;i<m;i++)
{
scanf("%d %d",&l,&r);
printf("%d\n",a[r]-a[l-1]);
}
}
用数组下标输出;
int a[10000010];
int main()
{
int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&m);
a[m]++;
}
for(int i=0;i<10000010;i++)
if(a[i]) printf("%d ",i);
printf("\n");
}
注意5x+3y+z/3=n n=x+y+z;
按公式写代码;一个一个试,满足的输出;
小时减小时 分钟减分钟 秒减秒 然后都转化为秒;