蓝桥杯预赛 2012年 c++ 本科

来源:互联网 发布:运营商数据分析 编辑:程序博客网 时间:2024/05/09 04:46

8:密码发生器


贴代码,不解释 :

#include<stdio.h>#include<string.h>int change(int i){    if(i<=9) return i;    else    {        int t=0;        while(i)        {            t+=i%10;            i/=10;        }        return change(t);    }}int main(){    int n;    char s[10000];    char a[110][7];    scanf("%d",&n);    while(n--)    {        int j,i,k=0,t=0;        scanf("%s",s);        for(i=0;s[i];i++)        {            a[k][t]=s[i];            t++;            if(t==6&&i!=strlen(s))            {                a[k][t]='\0';                k++;                t=0;            }        }        a[k][t]='\0';        int ans[7];        memset(ans,0,sizeof(ans));        for(i=0;i<6;i++)        {            for(j=0;j<=k;j++)            {                if(strlen(a[j])>=i+1) ans[i]+=a[j][i];                else ans[i]+=0;            }        }        for(i=0;i<6;i++)        printf("%d",change(ans[i]));        printf("\n");    }}


9.夺冠概率。

最初的分组有三种情况:甲和乙一组,甲和丙一组,甲和丁一组,分别计算中三种情况甲最终获胜的概率,然后10W次生成随机数,表示是那种情况。

#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){    double ans1=0.1*0.2*0.3+0.1*0.8*0.5;    double ans2=0.3*0.4*0.1+0.3*0.6*0.5;    double ans3=0.5*0.7*0.1+0.5*0.3*0.3;    int i;    double sum=0;    for(i=0;i<100000;i++)    {        int t=rand()%3+1;        if(t==1)        sum+=ans1;        else if(t==2)        sum+=ans2;        else        sum+=ans3;    }    printf("%.2lf\n",sum/100000);    return 0;}


10,取球游戏

  简单的博弈,先与处理出所有结果,然后O(1)的查询。

#include<stdio.h>#include<string.h>int a[10010];void init(){    a[1]=a[3]=a[5]=a[7]=0;    a[2]=a[4]=a[6]=a[8]=1;    for(int i=9;i<=10000;i++)    {        if(a[i-1]==0||a[i-3]==0||a[i-7]==0||a[i-8]==0)//A取球后,只要能给另一个人留下一个必败的情形,A就能赢        a[i]=1;        else        a[i]=0;    }}int main(){    int n;    memset(a,-1,sizeof(a));    init();    scanf("%d",&n);    while(n--)    {        int b;        scanf("%d",&b);        printf("%d\n",a[b]);    }    return 0;}



原创粉丝点击