请求大佬帮忙。写一个c语言程序。要c6.0的。

安柒柒 2019-06-18 07:43:24
编写一个C语言程序,实现以下功能:1、任意输入N个不同的数字;2、判断这N个不同的数字可以组成多少个互不相同且没有重复数字的N-1位数;3、将这些N-1位数按照从小到大的顺序排序并输出,每三个数字占一行;4、以自定义函数的方式实现,由主程序直接调用。
...全文
223 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
安柒柒 2019-06-19
  • 打赏
  • 举报
回复
引用 3 楼 宾灬的回复:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
int num; //输入数字的个数
int * data; //存输入的数字 0-9  数组

int * nums; // 存组成的数 数组
int numsIndex = 0; //组成的数的下标


/**
 * 交换
 * @param arr    [description]
 * @param index1 [description]
 * @param index2 [description]
 */
void swap(int * arr, int index1, int index2){
		int temp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = temp;
}
/**
 * [quickSort 快速排序]
 * @param start [description]
 * @param end   [description]
 */
void quickSort(int start, int end){
	if(start >= end){
		return;
	}
	int low = start, high = end;
	int middle = nums[start];//基数
	while(low < high){
		//从右往左找
		while(low < high && nums[high] > middle){
			high --;
		}
		//从左往右找
		while(low < high && nums[low] <= middle){
			low ++;
		}
		//交换
		swap(nums, low, high);
	}
	//交换
	swap(nums, start, low);
	quickSort(start, low-1);
	quickSort(low+1, end);
}
/**
 * [createNums 创建N-1位数字]
 * @param arr [description]
 * @param len [description]
 */
void createNums(int arr[], int len){
	int  x = 0;
	for(int i = 1; i < len; i++){ // 如果要创建N位数字(全排列) i从0开始
		if(arr[1] == 0){ //0是第一个数,不要
			return;
		}
		x += arr[i] * pow(10,len - i -1);
	}
	//存到数组中
	nums[numsIndex++] = x;
	
}
/**
 * 全排列 
 *思路:第一个数和后面的数(包括自己)交换,每个交换结果又用第二个数和后面的数交换,交换结果又用第三个数和后面的数交换....最后一个数和最后一个数交换。
 * @param arr   [数组]
 * @param index [交换数位置]
 * @param num   [最后一个数的位置]
 */
void perm(int arr[], int index, int endIndex){
	if(index == endIndex){ //一次递归结束
		createNums(arr, endIndex+1);
	}else{
		for(int i = index; i <= endIndex; i++){
			swap(arr, index, i); //交换数(index)和后面的数(包括自己)交换
			perm(arr, index+1, endIndex); //递归 index+1
			swap(arr, i, index); //交换完了,要换回来 以便 下一次循环
		}
	}
}

/**
 * [showNums 打印数字]
 */
void showNums(){
	for(int i = 0; i < numsIndex; i++){
		if(i % 3 == 0){
			printf("\n");
		}
		printf("%d ", nums[i] );

	}
}

/**
 * [enterNum 输入数字]
 */
void enterNum(){
	printf("要输入数字的个数:");
	scanf("%d", &num);
	printf("%d\n", num);
	data = (int*)calloc(num, sizeof(int)); //分配内存
	nums = (int*)calloc(num - 1, sizeof(int));

	for(int i = 0; i < num; i++){
		printf("请输入第%d个数:",   i+1);
		scanf("%d", data + i);
		printf("%d\n", data[i]);
	}
	perm(data, 0, num -1);
}


int main(){

	enterNum();
	printf("----------------------组成的数字如下:----------------");
	showNums();
	quickSort(0, numsIndex-1);
	printf("\n------------------------排序后:-------------------\n");
	showNums();
	free(data);
	free(nums);
	return 0;
}
非常感谢大佬,感谢
安柒柒 2019-06-19
  • 打赏
  • 举报
回复
感谢,非常感谢大佬
宾灬 2019-06-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
int num; //输入数字的个数
int * data; //存输入的数字 0-9  数组

int * nums; // 存组成的数 数组
int numsIndex = 0; //组成的数的下标


/**
 * 交换
 * @param arr    [description]
 * @param index1 [description]
 * @param index2 [description]
 */
void swap(int * arr, int index1, int index2){
		int temp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = temp;
}
/**
 * [quickSort 快速排序]
 * @param start [description]
 * @param end   [description]
 */
void quickSort(int start, int end){
	if(start >= end){
		return;
	}
	int low = start, high = end;
	int middle = nums[start];//基数
	while(low < high){
		//从右往左找
		while(low < high && nums[high] > middle){
			high --;
		}
		//从左往右找
		while(low < high && nums[low] <= middle){
			low ++;
		}
		//交换
		swap(nums, low, high);
	}
	//交换
	swap(nums, start, low);
	quickSort(start, low-1);
	quickSort(low+1, end);
}
/**
 * [createNums 创建N-1位数字]
 * @param arr [description]
 * @param len [description]
 */
void createNums(int arr[], int len){
	int  x = 0;
	for(int i = 1; i < len; i++){ // 如果要创建N位数字(全排列) i从0开始
		if(arr[1] == 0){ //0是第一个数,不要
			return;
		}
		x += arr[i] * pow(10,len - i -1);
	}
	//存到数组中
	nums[numsIndex++] = x;
	
}
/**
 * 全排列 
 *思路:第一个数和后面的数(包括自己)交换,每个交换结果又用第二个数和后面的数交换,交换结果又用第三个数和后面的数交换....最后一个数和最后一个数交换。
 * @param arr   [数组]
 * @param index [交换数位置]
 * @param num   [最后一个数的位置]
 */
void perm(int arr[], int index, int endIndex){
	if(index == endIndex){ //一次递归结束
		createNums(arr, endIndex+1);
	}else{
		for(int i = index; i <= endIndex; i++){
			swap(arr, index, i); //交换数(index)和后面的数(包括自己)交换
			perm(arr, index+1, endIndex); //递归 index+1
			swap(arr, i, index); //交换完了,要换回来 以便 下一次循环
		}
	}
}

/**
 * [showNums 打印数字]
 */
void showNums(){
	for(int i = 0; i < numsIndex; i++){
		if(i % 3 == 0){
			printf("\n");
		}
		printf("%d ", nums[i] );

	}
}

/**
 * [enterNum 输入数字]
 */
void enterNum(){
	printf("要输入数字的个数:");
	scanf("%d", &num);
	printf("%d\n", num);
	data = (int*)calloc(num, sizeof(int)); //分配内存
	nums = (int*)calloc(num - 1, sizeof(int));

	for(int i = 0; i < num; i++){
		printf("请输入第%d个数:",   i+1);
		scanf("%d", data + i);
		printf("%d\n", data[i]);
	}
	perm(data, 0, num -1);
}


int main(){

	enterNum();
	printf("----------------------组成的数字如下:----------------");
	showNums();
	quickSort(0, numsIndex-1);
	printf("\n------------------------排序后:-------------------\n");
	showNums();
	free(data);
	free(nums);
	return 0;
}
安柒柒 2019-06-18
  • 打赏
  • 举报
回复
引用 1 楼 super_admi的回复:
听过说c89,c99,c11,也听说过vc 6.0 vc 2005 vc 2008,却从未听说过c6.0.
vc6.0,打错了😂😂😂😂
super_admi 2019-06-18
  • 打赏
  • 举报
回复
听过说c89,c99,c11,也听说过vc 6.0 vc 2005 vc 2008,却从未听说过c6.0.

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧