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;
}
后面的代码越来越难想了,小女不才只能如此,若有错请提。真心发问,机试三个小时怎么敲得完啊,我构思要时间,写要时间,还要不受别人敲敲的干扰,错了还要调试更麻烦。
该怨怨,该写写,加油冲