计算机考研复试上机技巧

2020.8.21-2020.9.6 the first version

1 闰年
(year % 4 == 0 && year % 100 != 0) || (year % 400 = 0)
预处理每个月的天数,用空间换时间
int daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31}
{0,31,29,31,30,31,30,31,31,30,31,30,31}
}

2 保留几位输出
https://blog.csdn.net/qq_36667170/article/details/79265224
3.C语言读取text文件
https://www.runoob.com/cprogramming/c-file-io.html
#include
#include<stdio.h>
using namespace std;
int main(){

//逐行写 
FILE *fp = NULL;
char buffw[26];

fp = fopen("1.txt", "w+");
for(int i=0;i<26;i++){
	buffw[i]='a'+i;
} 
//fprintf(fp, "This is testing for fprintf...\n");
fputs(buffw,fp);
fclose(fp);	 

//逐行读 
//FILE *fp=NULL;
char buffr[255];
fp = fopen("D:\\devcpp\\baoyan\\1.txt", "r");
while(!feof(fp)){
	fgets(buffr,255,fp);

// printf("%s\n", buff);
cout<<buffr;
}
fclose(fp);
}

c++读取文件首选
https://cloud.tencent.com/developer/article/1403612
#include
#include
#include<stdio.h>
using namespace std;
int main(){
//写入
fstream wfile;
wfile.open(“1.txt”);
char sdata[26];
for(int i=0;i<26;i++){
sdata[i]=‘z’-i;
wfile << sdata[i]<<endl;
}
//cout<<sdata<<endl;
wfile.close();

//读取 
string data="";
fstream rfile;
rfile.open("1.txt");
//rfile.getline(data,27);//读取num-1个字符 
while (getline(rfile,data))
cout << data << endl;
rfile.close();
return 0;

}

4.vector容器
https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html
//vector容器
#include
#include
#include
using namespace std;
int main(){
vectorobj;
vector::iterator it;
for(int i=5;i>=0;i–){
obj.push_back(i);
}
//sort(obj.begin(),obj.end());
for(it=obj.begin();it!=obj.end();it++){
cout<<*it<<" ";
}

return 0;

}
5 sort函数
sort(first,last,comp)
起始地址first,last
comp 排序方式默认升序
重写sort函数可以变为降序
#include
#include
#include
using namespace std;
bool compare(int a,int b) {
return a>b; //升序排列,如果改为return a>b,则为降序
}
int main(){
int n=5;
int arr[n];
for(int i = 0; i < n; i++){
scanf("%d",&arr[i]);
}
sort(arr,arr+n,compare);
for(int i = 0; i < n; i++){
printf("%d “,arr[i]);
}
return 0;
}
compare函数:
比较函数,在遇到新的排序规则时,黄金法则:当比较函数返回值为true时,表示比较函数是第一个参会将排在第二个参数前面。
https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1?tpId=40&tqId=21333&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
#include
#include
#include
using namespace std;
struct student{
string name;
int grade;
int order;
};
bool compare1(student a,student b){
if(a.gradeb.grade){
return a.order<b.order;
}
else{
return a.grade>b.grade;
}
}
bool compare2(student a,student b){
if(a.grade
b.grade){
return a.order<b.order;
}
else{
return a.grade<b.grade;
}
}
int main(){
int n;
int func;
cin>>n>>func;
student stu[n];
for(int i=0;i<n;i++){
cin>>stu[i].name>>stu[i].grade;
stu[i].order=i;
}
if(func==0){
sort(stu,stu+n,compare1);
}else{
sort(stu,stu+n,compare2);
}
for(int i=0;i<n;i++){
cout<<stu[i].name<<” "<<stu[i].grade<<endl;
}
return 0;
}
6.二分查找
在查找次数很多的情况下,二分查找优于线性查找
二分查找需要先排序,再查找;
while(left<=right){
注意二分法退出循环的条件。
https://www.nowcoder.com/practice/d93db01c2ee44e8a9237d63842aca8aa?tpId=40&tqId=21531&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
#include
#include
using namespace std;
int BinarySearch(int a,int num[],int n){
int left=0;
int right=n-1;
int mid=(left+right)/2;
while(left<=right){
if(num[mid]a){
return 1;
}
else if(num[mid]<a){
left=mid+1;
}else{
right=mid-1;
}
mid=(left+right)/2;
}
return 0;
}
int main(){
int n,m;
while(cin>>n){
int arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n);
cin>>m;
int num,target;
for(int i=0;i<m;i++){
cin>>num;
target=BinarySearch(num,arr,n);
if(target
1){
cout<<“YES”<<endl;
}else{
cout<<“NO”<<endl;
}
}
}
return 0;
}

7.字符串string
string
https://www.runoob.com/cplusplus/cpp-strings.html
插入删除
长度
#include
#include
using namespace std;
int main(){
string str=“Hello World!”;
int n=str.length();//长度
str.insert(0, “zq”);//把"zq"插入到位置"0"
//cout<<str;
str.erase(0,2);//删除从位置0开始的2个字符
str.clear();
cout<<str;

return 0;

}
常用函数
find()
没找到返回-1
substr()
下标从0开始
#include
#include
using namespace std;
int main(){
string str=“Hello World!”;
int found=str.find(“Hello”);
cout<<found<<endl;
string str1=str.substr(0,5);
cout<<str1;
return 0;
}

常见应用
字符串处理
巧用ASCII码计算
https://www.nowcoder.com/practice/a5edebf0622045468436c74c3a34240f?tpId=60&tqId=29490&tPage=1&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking
#include
#include
using namespace std;
int main(){
string str1,str2;
cin>>str1>>str2;
int len1,len2;
len1=str1.length();
len2=str2.length();
int sum=0;
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
sum=sum+(str1[i]-‘0’)*(str2[j]-‘0’);
}
}
cout<<sum;
return 0;
}

getline()可以获取一行带空格的字符串,cin>>str遇到空格就会停止输入
https://www.nowcoder.com/practice/136de4a719954361a8e9e41c8c4ad855?tpId=61&tqId=29505&tPage=1&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking
#include
#include
#include
using namespace std;
int main(){

string str;
int sym;
while(getline(cin,str)){
    for(int i=0;i<str.length();i++){
        if(str[i]<='z'&&str[i]>='a'){
            sym=str[i]-'a';
            sym=(sym+1)%26;
            str[i]='a'+sym;
        }
        if(str[i]<='Z'&&str[i]>='A'){
            sym=str[i]-'A';
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值