第四章 阅读程序

第一课 模拟策略

【NOIP2011】(累加)

例:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int i,n,m,ans;
  5. cin>>n>>m;
  6. i=n;
  7. ans=0;
  8. while (i<=m){
  9. ans+=i;
  10. i++;
  11. }
  12. cout<<ans<<endl;
  13. return 0;
  14. }

360截图20250812204621958.jpg

答案:× × √ √ B A

解析: 360截图20250812205130993.jpg

第二课 字符处理

【NOIP2009】(二分字符排序)

例:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=50;
  4. void getnext(char str[]){
  5. int l=strlen(str),i,j,k,temp;
  6. k=l-2;
  7. while (k>=0 && str[k]>str[k+1]) k--;
  8. i=k+1;
  9. while (i<l && str[i]>str[k]) i++;
  10. temp=str[k];
  11. str[k]=str[i-1];
  12. str[i-1]=temp;
  13. for (i=l-1;i>k;i--){
  14. for (j=k+1;j<i;j++){
  15. if (str[j]>str[j+1]){
  16. temp=str[j];
  17. str[j]=str[j+1];
  18. str[j+1]=temp;
  19. }
  20. }
  21. }
  22. return ;
  23. }
  24. int main(){
  25. char a[maxn];
  26. int n;
  27. cin>>a>>n;
  28. while (n>0){
  29. getnext(a);
  30. n--;
  31. }
  32. cout<<a<<endl;
  33. return 0;
  34. }

360截图20250813161402228.jpg

答案:× √ √ √ A B

解析: 360截图20250813161619313.jpg

第三课 枚举算法

【NOIP2013】(判断字符是否为回文)

例:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. string str;
  5. cin>>str;
  6. int n=str.size();
  7. bool isPlalindrome=true; // isPlalindrome译为:回文数
  8. for (int i=0;i<n/2;i++){
  9. if (str[i]!=str[n-i-1]){
  10. isPlalindrome=false;
  11. break;
  12. }
  13. }
  14. if (isPlalindrome) cout<<"Yes";
  15. else cout<<"No";
  16. return 0;
  17. }

360截图20250815155532057.jpg

答案:× √ √ √ A B

解析:360截图20250815155716936.jpg

【NOIP2013】本题的函数写法

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. bool is_Plalindrome(string s){
  4. int size=s.size();
  5. for (int i=0;i<size;i++){
  6. if (s[i]!=s[size-i-1]) return false;
  7. }
  8. return true;
  9. } // 判断回文字符串函数
  10. int main(){
  11. string str;
  12. cin>>str;
  13. int n=str.size();
  14. if (is_Plalindrome(str)) cout<<"Yes";
  15. else cout<<"No";
  16. return 0;
  17. }

【NOIP2017】(字符串中第一个仅出现一次的字母)

例:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int t[256];
  5. string s;
  6. int i;
  7. cin>>s;
  8. for (i=0;i<256;i++) t[i]=0;
  9. for (i=0;i<s.length();i++) t[s[i]]++;
  10. for (i=0;i<s.length();i++){
  11. if (t[s[i]]==1){
  12. cout<<s[i]<<endl;
  13. return 0;
  14. }
  15. }
  16. cout<<"no";
  17. return 0;
  18. }

360截图20250815161747673.jpg

答案:× × √ × B B

解析:360截图20250815161842489.jpg 360截图20250815161851285.jpg

第四课 排序算法

【NOIP2010】(给定两个有序数列,合并成一个新的数列)

例:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int SIZE=100;
  4. int na,nb,a[SIZE],b[SIZE],i,j,k;
  5. int main(){
  6. cin>>na;
  7. for (i=1;i<=na;i++) cin>>a[i];
  8. cin>>nb;
  9. for (i=1;i<=nb;i++) cin>>b[i];
  10. i=1;
  11. j=1;
  12. while ((i<=na) && (i<=nb)){
  13. if (a[i]<=b[j]){
  14. cout<<a[i]<<' ';
  15. i++;
  16. }
  17. else{
  18. cout<<b[j]<<' ';
  19. j++;
  20. }
  21. }
  22. if (i<=na){
  23. for (k=i;k<=na;k++) cout<<a[k]<<' ';
  24. }
  25. if (j<=nb){
  26. for (k=j;k<=nb;k++) cout<<b[k]<<' ';
  27. }
  28. return 0;
  29. }

360截图20250816162045354.jpg

答案:√ √ × √ A A

解析:360截图20250816162155989.jpg