计概杂烩2018

2018计概期末

就医问题

#include <stdio.h>

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

int main(void) { 
    char a[2]={'B','A'};
    int x;scanf("%d",&x);printf("%c\n",a[x%2]);
	return 0;
}

马虎的佩奇

#include <stdio.h>
#define eps 0.000006
#include<math.h>

int main(void) { 
    double v1,v2,t,s;
    scanf("%lf%lf%lf%lf",&v1,&v2,&t,&s);
    if(s/v1-s/v2>=t&&v2>v1) printf("YES\n");
    else printf("NO\n");
	return 0;
}

多多爱赚零花钱

#include <stdio.h>

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

int main(void) { 
    double ans=0;
    for(int i=1;i<=12;++i)
    {
        double x;scanf("%lf",&x);
        ans+=x;
    }
    printf("$%.2lf\n",ans/12);
	return 0;
}

因子问题

#include <stdio.h>

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

int main(void) { 
    int n,m;scanf("%d%d",&n,&m);
    for(int i=1;i<m;++i)
        if(n%i==0&&n%(m-i)==0)
        {
            printf("%d\n",i);return 0;
        }
    printf("-1\n");
	return 0;
}

基因编辑

#include <stdio.h>
#include <string.h>
/* C语言初始模板程序 */

int main(void) { 
    char c[300];gets(c);
    for(int i=strlen(c)-1;i>0;--i)
        if(c[i]=='T'&&c[i-1]=='G')
            c[i]='G';
    puts(c);
	return 0;
}

注意陷阱GGT的情况要变成GTT而不是TTT,这里我采用了倒序的方式避免这种情况(也可以直接换个数组

孪生素数

#include <stdio.h>

int p(int x)
{
    for(int i=2;i<=x-1;++i)
        if(x%i==0)
            return 0;
    return 1;
}

int main(void) { 
    int m;scanf("%d",&m);
    for(int i=m;;--i)
    {
        if(p(i-2)&&p(i))
        {
            printf("%d %d\n",i-2,i);
            return 0;
        }
    }
	return 0;
}

判断素数的时候到sprtx即可,注意有时需要特判1和0

海王

#include <stdio.h>

int main(void) { 
    int n,ans=1;scanf("%d",&n);
    for(int i=1;i<n;++i)
        ans=(ans+1)*2;
    printf("%d\n",ans);
	return 0;
}

找规律写数即可

筛选病人

#include <stdio.h>
#include <string.h>
struct pa{
    char name[10];
    int age;
    float tem;
    int b;
}a[400],d[400];
int main(void) { 
    int n,cnt=0;scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%s%d%f%d",a[i].name,&a[i].age,&a[i].tem,&a[i].b);
        if(a[i].tem<37.5) a[i].b=0;
        if(a[i].b==1) d[++cnt]=a[i];
    }
    for(int i=1;i<cnt;++i)
        for(int j=i+1;j<=cnt;++j)
        {
            if(d[i].age<d[j].age||(d[i].age==d[j].age&&strcmp(d[i].name,d[j].name)>0))
            {
                struct pa tmp=d[i];d[i]=d[j];d[j]=tmp;
            }
        }
    for(int i=1;i<=cnt;++i)
        printf("%s %d %g\n",d[i].name,d[i].age,d[i].tem);
	return 0;
}

编程网格好像是不支持typedef为啥啊好离谱

谁能拿到最多的硬币

#include <stdio.h>

long long  a[200000],b[200000];

int main(void) { 
    long long n,k,ans=10000000000;scanf("%lld%lld",&n,&k);
    for(int i=1;i<=n;++i)
    {
        scanf("%lld",&a[i]);
        b[i]=b[i-1]+a[i];
    }
    for(int i=1;i<=k;++i)
    {
        if(ans>b[i+n-k]-b[i]) ans=b[i+n-k]-b[i];
    }
    printf("%lld\n",b[n]-ans);
	return 0;
}

思路:删除两边的k个数就相当于留下中间的n-k个数,使中间连续n-k个数最小,可以用前缀和处理。

前缀和:设\(b[1]=a[1],b[i]=b[i-1]+a[i](i>=2)\)

(即\(b[i]=a[1]+a[2]+...+a[i]\))

那么a数组中间第i个到第i+m个的和就是\(b[i+m]-b[i-1]\)

这样就避免了一次一次计算的超时。

可能int装不下要开longlong

迷信的病人

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

int isPrime(int x)
{
    if(x<=1) return 0;
    int m=sqrt(x);
    for(int i=2;i<=m;++i)
        if(x%i==0) return 0;
    return 1;
}

int isSquare(int x)
{
	if(x==0) return 0;
	int m=sqrt(x);
    if(x==m*m) return 1;
    return 0;
}

int id(int x)
{
    if(isPrime(x/1000000)==0) return 0;
    if(isSquare(x%1000)==0) return 0;
    for(int i=1;i<=9;++i)
    {
        if(x<=10) break;
        if(x%100==13) return 0;
        x/=10;
    }
    return 1;
}

int main(void) { 
    int m,n,ans=0;scanf("%d%d",&m,&n);
    for(int i=m;i<=n;++i)
        if(id(i))
            ++ans;
    printf("%d\n",ans);
	return 0;
}

拼图题,分别写判断平方数和判断素数的条件即可。

明哥之问

先说思路:约瑟夫的逆向搞法。

设f(n,m)表示n个人数到m出局最终剩下的人的编号。

f(n,m)=(f(n-1,m)+m-1)%n+1;

正向解决约瑟夫问题的时候用的是递归,从f(1,m)=1推到f(n,m)

逆向就是循环到f(i,m)==k符合题意了为止。

至于公式的推导这篇文章讲的明白

上代码:

#include <stdio.h>

int main(void) { 
    int m,k,now=1;scanf("%d,%d",&m,&k);
    	if(now==k)
    	{
    		printf("1\n");
    		return 0;
		}
    for(int i=1;;++i)
    {
    	now=(now+m-1)%i+1;
    	if(now==k)
    	{
    		printf("%d\n",i);
    		return 0;
		}
	}
	return 0;
}
posted @ 2023-12-15 17:02  hcx1999  阅读(31)  评论(0编辑  收藏  举报