第四章 阅读程序
第一课 模拟策略
【NOIP2011】(累加)
例:
#include <bits/stdc++.h>
using namespace std;
int main(){
int i,n,m,ans;
cin>>n>>m;
i=n;
ans=0;
while (i<=m){
ans+=i;
i++;
}
cout<<ans<<endl;
return 0;
}
答案:× × √ √ B A
解析:
第二课 字符处理
【NOIP2009】(二分字符排序)
例:
#include <bits/stdc++.h>
using namespace std;
const int maxn=50;
void getnext(char str[]){
int l=strlen(str),i,j,k,temp;
k=l-2;
while (k>=0 && str[k]>str[k+1]) k--;
i=k+1;
while (i<l && str[i]>str[k]) i++;
temp=str[k];
str[k]=str[i-1];
str[i-1]=temp;
for (i=l-1;i>k;i--){
for (j=k+1;j<i;j++){
if (str[j]>str[j+1]){
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
return ;
}
int main(){
char a[maxn];
int n;
cin>>a>>n;
while (n>0){
getnext(a);
n--;
}
cout<<a<<endl;
return 0;
}
答案:× √ √ √ A B
解析:
第三课 枚举算法
【NOIP2013】(判断字符是否为回文)
例:
#include <bits/stdc++.h>
using namespace std;
int main(){
string str;
cin>>str;
int n=str.size();
bool isPlalindrome=true; // isPlalindrome译为:回文数
for (int i=0;i<n/2;i++){
if (str[i]!=str[n-i-1]){
isPlalindrome=false;
break;
}
}
if (isPlalindrome) cout<<"Yes";
else cout<<"No";
return 0;
}
答案:× √ √ √ A B
解析:
【NOIP2013】本题的函数写法
#include <bits/stdc++.h>
using namespace std;
bool is_Plalindrome(string s){
int size=s.size();
for (int i=0;i<size;i++){
if (s[i]!=s[size-i-1]) return false;
}
return true;
} // 判断回文字符串函数
int main(){
string str;
cin>>str;
int n=str.size();
if (is_Plalindrome(str)) cout<<"Yes";
else cout<<"No";
return 0;
}
【NOIP2017】(字符串中第一个仅出现一次的字母)
例:
#include <bits/stdc++.h>
using namespace std;
int main(){
int t[256];
string s;
int i;
cin>>s;
for (i=0;i<256;i++) t[i]=0;
for (i=0;i<s.length();i++) t[s[i]]++;
for (i=0;i<s.length();i++){
if (t[s[i]]==1){
cout<<s[i]<<endl;
return 0;
}
}
cout<<"no";
return 0;
}
答案:× × √ × B B
解析:
![]()
第四课 排序算法
【NOIP2010】(给定两个有序数列,合并成一个新的数列)
例:
#include <bits/stdc++.h>
using namespace std;
const int SIZE=100;
int na,nb,a[SIZE],b[SIZE],i,j,k;
int main(){
cin>>na;
for (i=1;i<=na;i++) cin>>a[i];
cin>>nb;
for (i=1;i<=nb;i++) cin>>b[i];
i=1;
j=1;
while ((i<=na) && (i<=nb)){
if (a[i]<=b[j]){
cout<<a[i]<<' ';
i++;
}
else{
cout<<b[j]<<' ';
j++;
}
}
if (i<=na){
for (k=i;k<=na;k++) cout<<a[k]<<' ';
}
if (j<=nb){
for (k=j;k<=nb;k++) cout<<b[k]<<' ';
}
return 0;
}
答案:√ √ × √ A A
解析: