王道机试指南 您所在的位置:网站首页 王道机试指南和算法笔记 王道机试指南

王道机试指南

2023-08-30 21:19| 来源: 网络整理| 查看: 265

2/19更新 1/29更新 1/28更新 1/27更新

#include #include #include #include #include #include #include #include #include using namespace std; int main() { int n; return 0; } 暴力

最重要的是先 判断数据量。1000ms~10^7 例题2.1 清华大学上机题

#include int main(){ for(int i=1;i if(i!=j){ for(int k=0;k if(((i+j)*100+(j+k)*10+2*k)==532){ printf("%d %d %d\n",i,j,k); } } }} } } }

例题2.2 反序数

#include using namespace std; int main(){ for(int i=1000;i n*=10; n+=m%10; m/=10; } if(i*9==n)printf("%d\n",i); } return 0; }

例题2.3 对称平方数

#include int rev(int x){ int m=0; while(x!=0){ m*=10; m+=x%10; x/=10; } return m; } int main(){ for(int i=0;i string n,m; while(cin>> n>> m){ int sum=0; for(int i=0;i sum+=(n[i]-'0')*(m[j]-'0'); } } printf("%d\n",sum); } return 0; }

例题 4.2 密码翻译

#include #include #include #include #include #include #include #include #include using namespace std; int main() { string s; while(getline(cin, s)){ for(int i=0;i if(s[i]=='z'||s[i]=='Z'){ s[i]-=25; }else s[i]++; } } cout if(s1=="ENDOFINPUT") break; getline(cin, s2); for(int i=0;i s2[i]=(s2[i]-'A'-5+26)%26 + 'A'; } } cout if(s1=="#")break; getline(cin,s2); for(int i=0;i if(s1[i]==s2[j]){ sum+=1; } } cout if(isupper(s[i])) number[s[i]-'A']++; } for(int i=0;i int sum=0; for(int i=1;i int n; for(int i=2;i E.push_back(i); }else if(sum_A(i)>i) G.push_back(i); } printf("E:"); for(int i=0;i printf(" %d",G[i]); } return 0; }

例题5.4 栈的逆序使用

#include #include #include #include #include #include #include #include #include #include using namespace std; stack s; int main() { int n; scanf("%d",&n); int k=0; for(int i=0;i if(i!=0)printf(" "); printf("%d",s.top()); s.pop(); } return 0; }

简单计算器

/* * 《算法笔记》p245 第七章 提高篇(1)————数据结构专题(1) * 7.1 栈的应用:【Codeup 1918】简单计算器 * http://codeup.cn/problem.php?cid=100000605&pid=0 * 题目描述:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 * * 思路(王道): * (1)两个栈,符号栈和数字栈。两个哨兵'#'和'¥','#'压入栈底,'¥'接在串后,优先级'¥'>'#'。 * (2)优先级获得函数:'#'=0,'¥'=1,'+''-'=2,'*''/'=3。 * (3)获取数字函数 * (4)加减乘除计算函数 * (5)遍历字符串,遇到空格则跳过;遇到数字则压入数字栈; * 如果遇到的是符号,则比较当前op与操作符栈顶opTop的优先级 * 1)若果op>opTop,则将op入栈 * 2)如果op return 0; }else if (c == '$'){ return 1; }else if (c == '+'|| c == '-'){ return 2; }else{ return 3; } } double GetNumber(string str,int& index){//int& 为引用型,可以改变传递过来的参数本身的值,它们指向同一地址 double number = 0; while(isdigit(str[index])){ number = number*10 + str[index]-'0';//注意char转为int index++; } return number; } double Calculate(double x,double y,char op){ double result = 0; if(op=='+'){ result= x+y; }else if(op=='-'){ result= x-y; }else if(op=='*'){ result= x*y; }else if(op=='/'){ result= x/y; } return result; } int main(){ string str; while(getline(cin,str)){ if(str == "0"){ break; } int index = 0; stack oper; stack data; str += "$"; oper.push('#'); while(index index++; }else if(isdigit(str[index])){ data.push(GetNumber(str,index));//注意这里不用自增,在函数中已经自增 }else{ if(Priority(str[index])>Priority(oper.top())){ oper.push(str[index++]); }else{ double y = data.top(); data.pop(); double x = data.top(); data.pop(); data.push(Calculate(x,y,oper.top())); oper.pop(); } } } printf("%.2f\n",data.top()); } return 0; }

例题6.1 二進制轉換

#include #include #include #include using namespace std; int main(){ int n; while(scanf("%d",&n)!=EOF){ vector v; while(n!=0){ v.push_back(n%2); n/=2; } for(int i=v.size()-1;i>=0;i--){ printf("%d",v[i]); } printf("\n"); } }

例题6.2 30位的十进制转二进制 例题6.5 最大公约数

#include int fun(int a,int b){ if(b==0){ return a; }else return fun(b, a%b); } int main(){ int a, b; scanf("%d %d",&a,&b); printf("%d",fun(a,b)); }

7.1 贪心 鸡兔同笼

#include int main(){ int foot; while(scanf("%d",&foot)!= EOF){ int min= 0,max =0; scanf("%d",&foot); if (foot%2 != 0); else{ max = foot /2; min = foot/4 +(foot %4)/2; } printf("%d %d\n",min,max); } return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有