PTA基础编程 7-27至7-32

7-27 冒泡法排序

#include<stdio.h>
int main(){
	int N,K,n,a[100],c;
	scanf("%d %d",&N,&K);
	for(int i=0;i<N;i++)
		scanf("%d",&a[i]);	
	if(K<N){
		for(int j=0;j<N-1;j++){
			for(int k=0;k<N-j-1;k++){
				if(a[k]>a[k+1]){
			    	c=a[k];
			    	a[k]=a[k+1];
			    	a[k+1]=c;
		    	}
			}
		if((j+1)==K) break;	
		}
		for(int n=0;n<N;n++)
		printf("%d ",a[n]);
	}
	else printf("请输入满足K<N的数"); 
	return 0;
}

7-28 猴子选大王

#include<stdio.h>
int main(){
	int N,a[1000];
	int sum=0;
	scanf("%d",&N);                    //输入N只猴子 
	for(int i=1;i<=N;i++)	a[i]=i;    //舍去i=0 
	for(int j=1,count=0;j<=N;j++){      
		if(a[j]!=0) count++;       //当数组值不为0,才能报数 
		if(count==3){              //count用来报数,满3则令第三个数组值为0,即为淘汰 
			a[j]=0;
			count=0;           //报数到3,count清零,要重新开始 
			sum=sum+1;         //计数有几只猴子淘汰 
		}
		if(j==N) j=0;         //已全部报过数,再重新开始,因此次循环结束j会加1,则令j=0 
		if(sum==N-1) break;        //已经有 N-1只淘汰,结束循环 
	}
	for(int k=1;k<=N;k++){
		if(a[k]!=0)  printf("%d",a[k]);
	}
	return 0;	
}

7-29 删除字符串中的子串

#include<stdio.h>
#include<string.h>
int main(){
	int len1,len2,x;
	char str1[80],str2[80],str[80];
	gets(str1);
	gets(str2);
	len1=strlen(str1);
	len2=strlen(str2);
	for(int i=0;i<len1;i++){
            if(str1[i]==str2[0]){                  //遍历str1,有字符与str2首字符相同 
		for(int j=0;j<len2;j++)	 
		     str[j]=str1[i+j];             //将与str2相同长度的字符串从str1提出来 
		x=strcmp(str,str2);	           //比较大小,为0则相同 
		if(x==0){
		     for(int k=i;k<len1;k++)	
		         str1[k]=str1[len2+k];     //用后面的字符将要删去的字符覆盖 
		     i=0;                          //防止删掉后凑一起的字符又重复了 ,重新循环
		}
	    }		
	}
	puts(str1);
	return 0;
}

7-30 字符串的冒泡排序

#include<stdio.h>
#include<string.h>
int main(){
	int N,K;
	char string[10];
	scanf("%d%d",&N,&K);
	if(K>N) printf("N,K输入错误"); 
	getchar();                                 //吸收换行,否则会存到str[0] 
	char str[N][10];                           //N限制行数,10限制长度 
	for(int i=0;i<=N;i++) gets(str[i]);        //输入多行字符串 
	for(int j=0;j<N-1;j++){
	      for(int k=0;k<N-j-1;k++){
		  if(strcmp(str[k],str[k+1])>0){   //strcmp字符串比大小,strcpy字符串复制 
			strcpy(string,str[k+1]);
			strcpy(str[k+1],str[k]);
			strcpy(str[k],string);
		   }
	      }
	      if((j+1)==K) break;                  //扫描第K遍结束循环,因为j从0开始所以+1 
	}
	for(int i=0;i<=N;i++)
		printf("%s\n",str[i]);
	return 0;
}

7-31 字符串循环左移

#include<string.h>
int main(){
	char str[100];
	char x;
	int N,len;
	gets(str);
	len=strlen(str);
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		for(int j=0;j<len-1;j++){
			if(j==0) x=str[j];        //保存字符串第一个字符,防止被覆盖 
			str[j]=str[j+1];          //后面字符覆盖前一个字符 
			if(j==len-2) str[len-1]=x;//字符串最后一个字符被第一个字符覆盖 
		}
	}
	puts(str);
	return 0;
}

7-32 说反话-加强版

#include<stdio.h>
#include<string.h>
int main(){
	char str[500000];
	int len;
	gets(str);
	len=strlen(str);
	int i=len,x=0,count=0;
	while(i>=0){
		i--;
		if(str[i]!=32){
			count++;
			x=0;
		} 
		if(str[i]==32&&x==0){
			for(int j=i+1;j<=count+i;j++){
			    printf("%c",str[j]);		
			}
			printf(" ");
			x++;
			count=0;
		}
		if(i==0){
			for(int j=i;j<=count+i;j++){
			    printf("%c",str[j]);		
			}
		}
	} 
	return 0;
}

后面的代码越来越难想了,小女不才只能如此,若有错请提。真心发问,机试三个小时怎么敲得完啊,我构思要时间,写要时间,还要不受别人敲敲的干扰,错了还要调试更麻烦。

该怨怨,该写写,加油冲

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Try Hard️.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值