算法刷题

来源:互联网 发布:我的世界js怎么制作 编辑:程序博客网 时间:2024/05/10 12:49

今天犯了致命的错误:c语言中没有引用,害我错误找了半天,果然基础还是不行

int main(){    int a=0,b,c;    int &s=a;    return 0;}

编译出错 error C2143: 语法错误 : 缺少“;”(在“&”的前面)

问题一:
问题描述:
Bob和Alice有个约会,一大早Bob就从点(0,0)出发,前往约会地点(a,b)。Bob没有一点方向感,因此他每次都随机的向上下左右四个方向走一步。简而言之,如果Bob当前在(x,y),那么下一步他有可能到达(x+1,y), (x-1,y), (x,y+1), (x,y-1)。很显然,当他到达目的地的时候,已经很晚了,Alice早已离去。第二天,Alice质问Bob为什么放她鸽子,Bob说他昨天花了s步到达了约会地点。Alice怀疑Bob是不是说谎了。你能否帮她验证一下?

代码如下:

#include  <stdio.h>#include  <stdlib.h>int main(){    int a,b,s;    //printf("请输入三个整数a,b,s:");    scanf("%d %d %d",&a,&b,&s);    a=a>0?a:(-a);    b=b>0?b:(-b);    if(s-a-b<0)  printf("No");    else if((s-a-b)%2==0)  printf("Yes");    else printf("No");    return 0;}

问题二
问题描述:原来,面试官的手机被他调皮的儿子小明用一个数字作为密码锁上了。
小明只记得这个数字的十进制范围是l~r,且这个数的二进制表示中恰有m个1,却不记得确切的数字了。
面试官可急坏了。这才有了小赛一个将功赎过的机会。
他想要让小赛算出,他最坏情况下,要试多少次密码才能确保打开手机呢?
请输出这个次数。

#include <stdio.h>#include <stdlib.h>int main(){    int a,b,m,i,c,co,count=0;    scanf("%d %d %d",&a,&b,&m);    for (i=a;i<=b;i++)    {        c=i;        co=0;        while (c)        {            c=c&(c-1);            co++;        }        if(co==m) count++;    }    if(count>0) printf("%d",count);    else printf("-1");//  system("pause");    return 0;}

问题三
问题描述:有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?
注:规定从一级到一级有0种走法。

#include <stdio.h>/*上台阶*/int fun(int a){    if(a<1)  return -1;    if(a==1) return 0;    else if(a==2) return 1;    else if(a==3) return 2;    else return (fun(a-1)+fun(a-2));}int main(){    int n,i,A[100],num;    scanf("%d",&n);    for (i=0;i<n;i++)    {        scanf("%d",&A[i]);    }    for (i=0;i<n;i++)    {        num=fun(A[i]);        printf("%d\n",num);    }    system("pause");}

问题四
问题描述:说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。
请问:相似率为多少?

#include <string.h>#include <stdio.h>#define NUM(x)  (x>='0'&&x<='9')#define ACS(x)  ((x>='a'&&x<='z') ||(x>='A'&&x<='Z'))int main(){    int i=0;    char str1[1000],str2[1000];    char *p,*q;    gets(str1);    gets(str2);    p=str1;    q=str2;    while (*p!='\0'&&*q!='\0')    {        if (*q=='1'&&(NUM(*p)||ACS(*p)) )        {            i++;        }        else if(*q=='0'&&(!NUM(*p)&&!ACS(*p)) )        {            i++;        }        p++;q++;    }    printf("%4.2f%",((float)i*100/(strlen(str1))));    system("pause");    return 0;}

问题五:

问题描述:一个公交车经过n个站点,乘客从前门上车,从后门下车。
现在统计了在第i个站,下车人数a[i],以及上车人数b[i]。
问公交车运行时候车上最多有多少乘客

#include <stdio.h>int main(){    int i,n,a[100],b[100],max=0,sum=0;    scanf("%d",&n);    for (i=0;i<n;i++)    {        scanf("%d %d",&a[i],&b[i]);        sum+=(b[i]-a[i]);        max=max<sum?sum:max;    }    printf("%d",max);    system("pause");    return 0;}

问题六
问题描述:考研有4门科目,分别是政治(满分100分),英语(满分100分),数学(满分150分)和专业课(满分150分)。
某校计算机专业今年录取研究生的要求是:政治、英语每门课成绩不低于60分,数学和专业课不低于90分,总成绩不低于310分。并且规定:在满足单科以及总成绩最低要求的基础上,350分以上(含350分)为公费(Gongfei),310分~349分为自费(Zifei)。
请编程判断考生的录取情况。

#include <stdio.h>int main(){    int i,n,A[1000][4],sum;//数组太小也有错    scanf("%d",&n);    for (i=0;i<n;i++)    {               scanf("%d %d %d %d",&A[i][0],&A[i][1],&A[i][2],&A[i][3]);           }    for(i=0;i<n;i++)    {        sum=A[i][0]+A[i][1]+A[i][2]+A[i][3];        if (A[i][0]>=60&&A[i][1]>=60&&A[i][2]>=90&&A[i][3]>=90&&sum>=310)        {        //  if(sum<310) printf("Fail\n");          if(sum>=350) printf("Gongfei\n");            else printf("Zifei\n");        }        else        {            printf("Fail\n");        }    }//  system("pause");    return 0;}

问题七 下起楼来我最快
问题描述:小赛的家在楼层n,当前电梯停在的楼层m,
以及电梯每经过一层楼的时间t1,开门时间t2,关门时间t3,还有小赛每下一层楼的时间t4,
让你帮小赛计算一下,他最快到达第1层的时间。

#include <stdio.h>#include <math.h>int main(){    long  m,n;    long  t1,t2,t3,t4,sumt,sumx;    scanf("%ld%ld",&n,&m);    scanf("%ld%ld%ld%ld",&t1,&t2,&t3,&t4);    sumt=(n-1)*t4;    sumx=abs(n-m)*t1+t2+t3+t1*(n-1)+t2;    sumt=(sumt<sumx)?sumt:sumx;    printf("%ld",sumt);    return 0;}

问题七认老乡
问题描述:大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小赛尤其热衷。但是大家都不告诉小赛他们来自哪里,只是说与谁同乡,从所给的信息中,你能告诉小赛有多少人确定是她的同乡吗?
输入:每个测试实例首先包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*(N-1)/2),代表现有N个人(用1~N编号)和M组关系;
在接下来的M行里,每行包括2个整数,a,b,代表a跟b是同乡;
当N = 0,M = 0输入结束;
已知1表示小赛本人。

#include<stdio.h>int root[1001];int findroot(int x){    if(root[x]==x)        return x;        else {            int c=findroot(root[x]);            root[x]=c;            return c;        }}int main(){    int n,m;    while(scanf("%d %d",&n,&m)&&(n!=0||m!=0)){           for(int i=1;i<=n;i++){                root[i]=i;           }            for(int i=0;i<m;i++){                int a,b;                scanf("%d %d",&a,&b);                int x=findroot(a);                int y=findroot(b);                if(x!=y){                    root[y]=x;                }            }            int countx=0;            for(int i=2;i<=n;i++){                if(findroot(i)==findroot(1))                    countx++;            }            printf("%d\n",countx);    }    return 0;}

/这个看不懂什么意思,还是水平不够,虽然结果是对的/
虽然多多少少理解了,但是如果纯自己写就不会了

1 0
原创粉丝点击