一、 有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(不要求保持原顺序)
/* 有一个由大小写组成的字符串,现在需要对他进行修改,
将其中的所有小写字母排在大写字母的前面
(不要求保持原顺序) */
#include <stdio.h>
#include <string.h>
int partion(char *a,int left,int right)
{
char num = a[right];
while(left < right)
{
while(a[left]<='z' && a[left]>='a' && left < right)
{
left++;
}
if(left < right)
{
a[right] = a[left];
right--;
}
while(a[right]<='Z' && a[right]>='A' && left < right)
{
right--;
}
if(left < right)
{
a[left] = a[right];
left++;
}
}
a[left] = num;
return left;
}
void Small(char *a,int left,int right)
{
if(left < right)
{
int i = partion(a,left,right);
Small(a,left,i-1);
Small(a,i+1,right);
}
}
int main()
{
char a[] = "SAadDfasAdSa";
int len = strlen(a);
printf("%s\n",a);
Small(a,0,len-1);
printf("%s\n",a);
return 0;
}
二、最小的k个数,输入n个整数,找出其中最下的k个数
例如输入4、5、1、6、2、7、3、8、1、2,
输出最下的4个数,则输出1、1、2、2
/* 最小的k个数,输入n个整数,找出其中最下的k个数,
例如输入4、5、1、6、2、7、3、8、1、2,
输出最下的4个数,则输出1、1、2、2
*/
#include <stdio.h>
void myPrint(int *a,int k)
{
int i;
if(k <= 0)
return;
printf("%d",a[0]);
for(i = 1;i < k;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
int partion(int *a,int left,int right)
{
int num = a[right]; //以数组最后一位为基数
while(left < right)
{
while(a[left] <= num && left < right)
{
left++;
}
if(left < right)
{
a[right] = a[left];
right--;
}
while(a[right] >= num && left < right)
{
right--;
}
if(left < right)
{
a[left] = a[right];
left++;
}
}
a[left] = num;
return left;
}
void mySort(int *a,int left,int right)
{
if(left < right)
{
int data = partion(a,left,right);
mySort(a,left,data-1);
mySort(a,data+1,right);
}
}
int main()
{
int a[] = {1,4,8,2,6,8,3,24,2,3,4,5,3,3,4};
int len = sizeof(a)/sizeof(int);
int k;
printf("请输入要找的最下数的个数为:");
scanf("%d",&k);
if(k <= len)
{
mySort(a,0,len-1);
myPrint(a,k);
}
else
printf("超过数组长度不存在\n");
return 0;
}
三、判断数组中出现超过一半的数字
#include <stdio.h>
#include <stdlib.h>
struct Data
{
int k; //用于记录超过一半的数据的下标
int count;//用于记录超过一半的数据的个数
};
void myPrint(int *a,int len)
{
int i;
for(i = 0;i < len;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
int partion(int *a,int left,int right,int len,struct Data *data)
{
int count = 1;
int num = a[right];
while(left < right)
{
while(a[left] < num && left < right)
{
left++;
}
if(left < right)
{
a[right] = a[left];
right--;
if(a[left] == num)
count++;
}
while(a[right] > num && left < right)
{
right--;
}
if(left < right)
{
a[left] = a[right];
left++;
if(a[right] = num)
count++;
}
}
a[left] = num;
if(count > len)
{
//printf("有超过一半的数,有%d个%d\n",count,a[left]);
data->k = left; //记录下标
data->count = count; //记录个数
}
return left;
}
void mySort(int *a,int left,int right,int len,struct Data *data)
{
if(left < right)
{
int pivotIndex = partion(a,left,right,len,data);
mySort(a,left,pivotIndex-1,len,data);
mySort(a,pivotIndex+1,right,len,data);
}
}
int main()
{
int a[] = {1,1,3,1,3,3,3,3,3,3,6,6,5,3,4,5,3,34,3,3,8};
int len = sizeof(a)/sizeof(int);
struct Data *data = (struct Data *)malloc(sizeof(struct Data));
mySort(a,0,len-1,len/2,data);
myPrint(a,len);
if(data->k < 0)
{
printf("没有超过一半的数\n");
}
else
{
printf("有超过一半的数:%d,并且共有%d个\n",a[data->k],data->count);
}
return 0;
}
四、要求将下列名单随机分组:分组要求,随机选择4个人组成一组
输出结果:4个人一行进行输出,每行代表一个组
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void swap(char (*a)[10],int i,int j)
{
char tmp[10];
strcpy(tmp,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],tmp);
}
//按字符从小到大排序
void myPrint(char(*a)[10],int len)
{
int i;
for(i = 0;i < len;i++)
{
printf("%s\t",a[i]);
if(0 == (i+1)%4)
printf("\n");
}
printf("\n");
}
void mySort(char (*a)[10],int len) //选择排序,按字符串的大小比的
{
int i,j;
for(i = 0;i < len;i++)
{
int min = i;
for(j = i+1;j < len;j++)
{
if(strcmp(a[j],a[min]) < 0)
{
min = j;
}
}
if(min != i)
{
swap(a,i,min);
}
}
}
//随机选出4个人一组
void Rank(char (*a)[10],int len)
{
srand(time(NULL));
int tmp = rand()%len;
int i;
for(i = 0;i < len;i++)
{
if(tmp < len)
swap(a,i,tmp);
}
}
int main()
{
char a[][10] = {"曾从威","蒋恺均","刘江涛","崔雅倩","祝秋培","吴赟鹏","李鸿飞","王 虎","缪 峰"\
,"张 龙","刘加封","姚 笛","郑 丹","孔海宇","陈逸伦","徐煜清","陈 喆","盛 开","方文倩","边金鹏"\
,"陈振宇","陶小康","孙凌霄","王玉恒","王娇娇","许新华","胡光兴","周 波","王 鹏","李鸿飞","陈 程"\
,"徐小蕤","李 峰","王 琦","陈梦玉","陈志辉","李 森","陈 芳"};
//char a[][10] = {"曾从威","蒋恺均","刘江涛","崔雅倩","祝秋培","吴赟鹏","李鸿飞"};
//char a[][10]= {"曾","刘"};
int len = sizeof(a)/sizeof(a[7]);
//printf("%d\n",len);
//mySort(a,len);
Rank(a,len);
myPrint(a,len);
return 0;
}