算法刷题
来源:互联网 发布:我的世界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;}
/这个看不懂什么意思,还是水平不够,虽然结果是对的/
虽然多多少少理解了,但是如果纯自己写就不会了
- 算法刷题
- leetcode算法刷题
- 算法刷题0001
- 算法刷题
- 算法刷题笔记
- 算法刷题模板
- leetcode算法刷题
- [算法]常见算法题
- 算法题/排序算法
- LeetCode 算法刷题(3)
- LeetCode 算法刷题(373)
- LeetCode 算法刷题(4)
- 刷题算法小技巧
- poj算法刷题进阶
- LeetCode 算法刷题(7)
- LeetCode 算法刷题(6)
- LeetCode 算法刷题(5)
- LeetCode 算法刷题(9)
- Linux-2.6.20的LCD驱动分析
- 第5章 路由事件(3)——隧道路由事件
- 四个拷贝函数的分析与实现
- 5883-The Best Path
- PHP CodeIgniter(CI)去掉 index.php
- 算法刷题
- snmp++ 3.3.7开发包的使用
- 霓虹政事与历史
- 括号匹配
- Oracle 11g学习笔记--binary_float和binary_double数据类型
- 数字签名与数字证书形象解释
- 微信端与移动端设备的判断
- hdu 5925 Coconuts (构造,离散化*)
- JavaScript模块化