目录
一、基础结构方面
1.1调用标准库*
1.2输入输出方面
1.2.1保留几位小数输出*
1.2.2字符/字符串*
1.2.3输入n个数(循环用)
1.3i++和++i
二、数学方面
2.1绝对值
2.2幂次方
2.3取整问题
2.4涉及分数计算
三、字符串方面
3.1字符比较
例题:KY45 skew数
练习笔记记录基于王道计算机考研——机试指南(第二版),部分院校的机试题在:考研真题_牛客网 和高校计算机考研复试_历年真题+题解_牛客题霸_牛客网
每篇会贴上几个机试原题和我找到题(leetcode、洛谷等)及我的解题思路。
(立个flag 要每天刷一道题 至少一周一更)
这些是比较基础容易忘的,适合小白入手 ,加星*是我认为比较重要的。
我自己的三条经常踩坑注意事项:
1.设数组要到int main()的外面去。
2.数组设置要稍微大一些,如10*10,不要设成a[11][11],要a[15][15]。
3.(有找不出的bug时),尽量多用scanf。
4.平常练习时,有找不出的bug可以问chatgpt,很好用
一、基础结构方面
1.1调用标准库*
当题目不是太复杂时,调用库可以直接调用标准库,其包含了几乎所有的C++库,不用在整cmath、iostream等库了。
#include<bits/stdc++.h>
1.2输入输出方面
1.2.1保留几位小数输出*
// 使用%.2f来指定保留两位小数
printf("%.2f", number);
f符号代表double和浮点数
1.2.2字符/字符串*
使用scanf/printf输入输出时,
c表示单个字符,s表示字符串,如
scanf("%s", name);
输入字符串(string)不用cin,用getline(cin,string1);
输入n个字符串:
while(getline(cin,str)
1.2.3输入n个数(循环用)
while(scanf("%d",&x)==1);
while(cin>>a[i++])
1.3i++和++i
自行调整,一般是i++,测试输出差一位调整为++i
二、数学方面
2.1绝对值
a=abs(n);
2.2幂次方
10的n次方↓
a=pow(10,n);
2.3取整问题
ceil()
向上取整,比如1.1->2
int()
向下取整,如4.5->4 (注:常规取整没说明就用int)
2.4涉及分数计算
如计算三分之一(1/3)的计算,要整成浮点数除法,如
double q = i * 5 + j * 3 + k * (1.0 / 3);
三、字符串方面
3.1字符比较
strcmp(a,b)
当值==0时,a=b; <0时,a<b; >0时,a>b。
例题:KY45 skew数
描述
在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2,例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。
输入描述:
输入包括多组数据,每组数据包含一个 skew 数。
输出描述:
对应每一组数据,输出相应的十进制形式。结果不超过 2^31-1。
示例1
输入:
10120 200000000000000000000000000000 10 1000000000000000000000000000000 11 100 11111000001110000101101102000复制输出:
44 2147483646 3 2147483647 4 7 1041110737
分析:长度明显超了一般的数据类型(int),用字符串-‘0’处理,同时不定输入用while(getlin(cin,str))处理,其实这种‘简单’的送分题有时候也不好做对,因为涉及的知识点可能很细很杂……
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
while(getline(cin,s)){
int sum=0;
int l=s.size();
for(int i=0;i<s.size();i++){
sum+=(s[i]-'0')*(pow(2,l)-1);
l--;
}
cout<<sum<<endl;
}
}