计概杂烩2020

2020计概

计算圆柱体的表面积

#include <stdio.h>
int main(void) { 
    double r,h;
    scanf("%lf%lf",&r,&h);
    printf("Area = %.3lf\n",3.14159*r*(r+h)*2);
	return 0;
}

最近的食堂

#include <stdio.h>
#include <math.h>

int main(void) {
    int n;scanf("%d",&n);
    double a,b,c=100.0;
    for(int i=1;i<=n;++i)
    {
        scanf("%lf%lf",&a,&b);
        double tmp=sqrt(a*a+b*b);
        if(c>tmp) c=tmp;
    }
    printf("%.2lf",c);
	return 0;
}

斐波那契数列推广

#include <stdio.h>

/* C语言初始模板程序 */

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

自守数

#include <stdio.h>
int main(void) { 
    int n;scanf("%d\n",&n);int n1=n,l=1;
    while(n1) {l*=10;n1/=10;}
    if(n*n%l==n) printf("yes\n");
    else printf("no\n");
	return 0;
}

买口罩

#include <stdio.h>

int a[2000],b[2000];

int main(void) { 
    int n,m,ans=0;scanf("%d%d",&m,&n);
    for(int i=1;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
    for(int i=1;i<n;++i)
        for(int j=i+1;j<=n;++j)
            if(a[i]>a[j])
            {
                int tmp=b[i];b[i]=b[j];b[j]=tmp;
                tmp=a[i];a[i]=a[j];a[j]=tmp;
            }
    for(int i=1;i<=n;++i)
    {
        if(b[i]<m)
            ans+=a[i]*b[i],m-=b[i];
        else
        {
            ans+=m*a[i];
            break;
        }
    }
    printf("%d\n",ans);
	return 0;
}

小迪游园记之找不同

#include <stdio.h>

void swap(char *x,char *y)
{
    int tmp=*x;*x=*y;*y=tmp;
}

int main(void) { 
    char a[30],b[30];gets(a);gets(b);
    for(int i=0;i<strlen(a);++i)
        for(int j=i+1;j<strlen(a);++j)
            if(a[i]>a[j])
                swap(&a[i],&a[j]);
    for(int i=0;i<strlen(b);++i)
        for(int j=i+1;j<strlen(b);++j)
            if(b[i]>b[j])
                swap(&b[i],&b[j]);
    for(int i=0;i<strlen(b);++i)
        if(a[i]!=b[i])
        {
            printf("%c\n",b[i]);
            break;
        }
	return 0;
}

跟之前的相似的名字那题一样,排序然后比较

编码字符串

#include <stdio.h>
#include <string.h>
#include <math.h>
char c[2000];
int cnt,m='a'-'A';

void print(char x)
{
    if(x<='Z') x+=m;
    printf("(%c,%d)",x,cnt+1);cnt=0;
}

int main(void) { 
    gets(c);int l=strlen(c);
    for(int i=0;i<l;++i)
    {
        if(abs(c[i]-c[i+1])%m!=0)
            print(c[i]);
        else ++cnt;
    }
	return 0;
}

特殊的数

#include <stdio.h>

int f(int x)
{
    int b=x%2;
    while(x)
    {
        if(x%2!=b)
            return 0;
        x/=10;b=!b;
    }
    if(b) return 0;
    return 1;
}

int main(void) { 
    int t;scanf("%d",&t);
    while(t--){
        int l,r,cnt=0;scanf("%d%d",&l,&r);
        for(int i=l;i<=r;++i)
            if(f(i))
                ++cnt;
        printf("%d\n",cnt);
    }
	return 0;
}

卷怪竟在我身边

/*code from myy!!!orz*/
#include <stdio.h>
#include<math.h>
int kh[20000],kcxf[1000000];
int xks[20000],xh[20000],xf[20000];
double jd[20000],a;
int xkh[2000],fs[2000];
int main(void) { 
	int n,b;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
	    scanf("%d",&kh[i]);
	    scanf("%d",&kcxf[kh[i]]);
	}
	int m;
	scanf("%d",&m);
	for(int i=0;i<m;i++){
	    scanf("%d%d",&xks[i],&xh[i]);
	    xf[i]=0;
	    jd[i]=0;
	    for(int j=0;j<xks[i];j++){
	        scanf("%d%d",&xkh[j],&fs[j]);
	        xf[i]+=kcxf[xkh[j]];
	        if(fs[j]>=60){
	            jd[i]+=(4.0-3.0*pow((10.0-fs[j]*1.0/10.0),2.5)/32.0)*kcxf[kh[i]];
	        }
	    }
	    jd[i]/=1.0*xf[i];
	}
	
	for(int i=0;i<m;i++){
	    for(int j=0;j<m-i-1;j++){
	        if(jd[j]<jd[j+1]){
	            a=jd[j];
	            jd[j]=jd[j+1];
	            jd[j+1]=a;
	            b=xh[j];
	            xh[j]=xh[j+1];
	            xh[j+1]=b;
	        }
	        if(jd[j]==jd[j+1]){
	            if(xh[j]>xh[j+1]){
	                b=xh[j];
	                xh[j]=xh[j+1];
	                xh[j+1]=b;
	            }
	        }
	    }
	}
	printf("%d",xh[0]);
	for(int i=1;i<m;i++){
	    if(jd[i]==jd[0]){
	        printf(" %d",xh[i]);
	    }
	}
	return 0;
}

生命游戏

#include <stdio.h>

int a[200][200],b[200][200];
int fx[8]={1,1,1,-1,-1,-1,0,0};
int fy[8]={0,1,-1,-1,1,0,1,-1};
int f1(int x,int y)
{
    int ret=0;
    for(int i=0;i<8;++i)
    {
        int now=a[x+fx[i]][y+fy[i]];
        if(now>1) continue;
        ret+=now;
    }
    return ret;
}

int main(void) { 
	int n,m;scanf("%d%d",&n,&m);b[0][0]=b[n+1][0]=b[0][n+1]=b[n+1][n+1]=2;
	for(int i=1;i<=n;++i,a[n+1][i]=a[0][i]=a[i][n+1]=a[i][0]=2)
	    for(int j=1;j<=m;++j)
	        scanf("%d",&a[i][j]);
	for(int i=1;i<=n;++i)
	    for(int j=1;j<=m;++j)
	    {
	        b[i][j]=a[i][j];
	        if(a[i][j]&&f1(i,j)<2) b[i][j]=0;
	        else if(a[i][j]&&f1(i,j)<=3) b[i][j]=1;
	        else if(a[i][j]) b[i][j]=0;
	        else if(f1(i,j)==3) b[i][j]=1;
	    }
	for(int i=1;i<=n;++i)
	    for(int j=1;j<=m;++j)
	        if(j==m) printf("%d\n",b[i][j]);
	        else printf("%d ",b[i][j]);
	return 0;
}

模拟,注意一下细节,可以用函数来实现重复的功能

合理消费

#include <stdio.h>

int a[400],b[400],cnt;
int n,p,pd;

void print()
{
    for(int i=1;i<cnt;++i) printf("%d ",b[i]);
    printf("%d\n",b[cnt]);
    pd=1;
}

void f(int p,int x)
{
    if(a[x]>p) return;
    p-=a[x];b[++cnt]=a[x];
    if(p==0) {print();--cnt;return;}
    for(int i=x;i<=n;++i)
    {
        f(p,i);
    }
    --cnt;
}

int main(void) { 
    scanf("%d%d",&n,&p);
    for(int i=1;i<=n;++i)
        scanf("%d",&a[i]);
	for(int i=1;i<=n;++i) f(p,i);
	if(pd==0) printf("NO\n");
	return 0;
}

使用递归,每次决定当前的要不要(再)买一件,不能用,跟2017年最佳凑单的方法一差不多

posted @ 2023-12-15 17:51  hcx1999  阅读(23)  评论(0编辑  收藏  举报