C++ 做题 Ⅵ

x33g5p2x  于2022-04-10 转载在 其他  
字(2.4k)|赞(0)|评价(0)|浏览(514)

1、字符位移子串问题
输入两行字符串s1、s2,判断s2是否是s1经过若干次循环位移后产生的母串的子串。
返回判断答案

  1. 例如:
  2. AABCD
  3. CDAA
  4. 返回:true
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. const int N=60;
  6. int main(){
  7. char s1[N],s2[N],a[N],t[N];
  8. cout<<"请输入字符串s1:";
  9. gets(s1); //输入字符串
  10. cout<<"请输入字符串s2:";
  11. gets(s2);
  12. if(strlen(s1)<strlen(s2)){ //把s1作为母串,s2为子串判断
  13. strcpy(t,s1); //交换子母串
  14. strcpy(s1,s2);
  15. strcpy(s2,t);
  16. }
  17. strcpy(a,s1); //把母串赋给a
  18. cout<<"------------------------------"<<endl;
  19. cout<<"母串:"<<strcpy(a,s1)<<endl;
  20. if(strstr(strcat(s1,a),s2)==NULL)
  21. cout<<s2<<"不是"<<a<<"的位移子串";
  22. else
  23. cout<<s2<<"是"<<a<<"的位移子串";
  24. }

2、判断2-100有多少个素数

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int prime(int); //函数声明
  6. int sum=0;
  7. int main(){
  8. for(int i=2;i<=100;++i)
  9. prime(i); //函数调用
  10. cout<<endl<<sum<<endl;
  11. }
  12. int prime(int a){ //函数定义
  13. int c;
  14. if(a==2) sum=1;
  15. int j=2;
  16. while(j<=sqrt(a) && a%j !=0) j++;
  17. if(a%j!=0){
  18. sum +=1;
  19. cout<<a<<" ";
  20. }
  21. }

3、递归求最大公约数

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int gcd(int,int);
  6. int sum=0;
  7. int main(){
  8. int m,n,r;
  9. cout<<"请输入m,n的值:";
  10. cin>>m>>n;
  11. r=gcd(m,n);
  12. cout<<"最大公约数是:"<<r<<endl;
  13. }
  14. int gcd(int m,int n) {
  15. return n==0 ? m:gcd(n,m%n);
  16. }

4、递归求1+2+3+…+n的和

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int result(int);
  6. int sum=0;
  7. int main(){
  8. int n,r;
  9. cout<<"请输入n的值:";
  10. cin>>n;
  11. r=result(n);
  12. cout<<"总数是:"<<r<<endl;
  13. }
  14. int result(int n) {
  15. if (n==1) return 1;
  16. else return result(n-1)+n;
  17. }

5、标准读入文件

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int main(){
  6. freopen("in.txt","r",stdin);
  7. freopen("out.txt","w",stdout);
  8. int temp,sum=0;
  9. while(scanf("%d",&temp)==1) {
  10. sum +=temp;
  11. }
  12. printf("%d\n",sum);
  13. fclose(stdin);
  14. fclose(stdout);
  15. return 0;
  16. }

用fopen方式

  1. #include <cstdio>
  2. #include <cmath>
  3. using namespace std;
  4. int main(){
  5. FILE *fin,*fout;
  6. fin=fopen("in.txt","rb");
  7. fout=fopen("out.txt","wb");
  8. int temp,sum=0;
  9. while(fscanf(fin,"%d",&temp)==1){
  10. sum+=temp;
  11. }
  12. fprintf(fout,"%d\n",sum);
  13. fclose(fin);
  14. fclose(fout);
  15. return 0;
  16. }

相关文章