C语言,输入一数组,取出所有的前一个小于后一个的元素,组成新的数组,输出其值.
输入一个正整数repeat,接下去输入repeat组数据,每组数据为:读入1个正整数n,再读入n个整数。...
输入一个正整数 repeat ,接下去输入 repeat 组数据,每组数据为:
读入 1 个正整数n , 再读入 n 个整数 。 展开
读入 1 个正整数n , 再读入 n 个整数 。 展开
3个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 获取数组个数
int get_repeat()
{
int repeat = 0;
do
{
printf("请输入repeat的值[repeat > 0]: ");
scanf("%d", &repeat);
} while (0 >= repeat);
return repeat;
}
// 获取每个数组的内容
// current_numbers 一维数组,表示每个数组所含元素个数
// repeat 数组总个数
int ** get_repeats_array(int * current_numbers, int repeat)
{
int num = 0; // 当前数组的个数
int * array = 0; // 动态数组,存储当前数组的元素
int **parr = (int **)malloc(sizeof(int *) *repeat); // 指针数组,每个元素表示一个数组
for (int i = 0; i < repeat; i++)
{
do {
printf("请输入当前数组中元素个数: ");
scanf("%d", &num);
} while (0 >= num);
current_numbers[i] = num; // 当前数组元素个数存储一维数组中
array = (int *)malloc(sizeof(int) * num);
if (NULL == array)
{
printf("malloc failed...\n");
exit(EXIT_FAILURE);
}
printf("请输入%d个元素: ", num);
for (int j = 0; j < num; j++)
{
scanf("%d", &array[j]); // 将数据存储到数组中
}
parr[i] = array; // 将当前数组放入到指针数组中
}
return parr;
}
// 释放申请有内存空间
void release(int ***ptr, int *** other, int ** nums, int ** new_nums, int len)
{
for (int i = 0; i < len; i++)
{
free((*ptr)[i]);
free((*other)[i]);
}
free(*ptr);
free(*nums);
free(*other);
free(*new_nums);
*ptr = 0;
*nums = 0;
*other = 0;
*new_nums = 0;
}
// 取出符合要求的数据元素,并放入新的数组中
int ** sort(int ** array, int * nums, int len, int *new_nums)
{
int count = 0;
int * tmp = 0;
int ** pparr = (int **)malloc(sizeof(int*) * len); // 指针数组
for (int i = 0; i < len; i++)
{
tmp = (int *)malloc(sizeof(int)); // 一维数组,存储符合要求的数据
for (int j = 0; j < nums[i] - 1; j++)
{
if (array[i][j] < array[i][j + 1])
{
tmp = (int *)realloc(tmp, sizeof(int) * (count + 1)); // 增加存储空间,以容纳新的数据
tmp[count++] = array[i][j];
}
}
new_nums[i] = count; // 记录当前数据中元素个数
pparr[i] = tmp; // 将当前数组地址放入指针数组中
count = 0; // 清空记录个数
tmp = 0;
}
return pparr;
}
// 打印数组中的元素
// array 指针数组,存储所有数组
// nums 一维数组,当前数组中元素个数
// len 指针数组中存储数组的个数
void print_array(int ** array, int * nums, int len)
{
for (int i = 0; i < len; i++)
{
for (int j = 0; j < nums[i]; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
printf("\n");
}
// TEST
int main(int argc, char * argv[])
{
int * current_numbers = 0;
int * new_nums = 0;
int ** pparray = 0;
int ** ppnew_array = 0;
int n = get_repeat();
current_numbers = (int *)malloc(sizeof(int) * n);
new_nums = (int *)malloc(sizeof(int) * n);
pparray = get_repeats_array(current_numbers, n);
printf("\n原始数据如下:\n");
print_array(pparray, current_numbers, n);
ppnew_array = sort(pparray, current_numbers, n, new_nums);
printf("符合要求的数据元素如下:\n");
print_array(ppnew_array, new_nums, n);
release(&pparray, &ppnew_array, ¤t_numbers, &new_nums, n);
return 0;
}
程序中有些地方没有做数据有效性验证,自己添加上就好了
展开全部
#include <stdio.h>
void main()
int n;
scanf("%d",&n);
while(n--){
int m,i=0;
scanf("%d",&m);
while(m--){
int num,a;
scanf("%d",&num);
if(i++)
if(a>num)
printf("%d>%d\t",a,num);
a = num;
}
printf("\n");
}
system("pause");
}
追问
输出为每组数据,在独立的一行上输出结果(各元素间空一格)。输入样例
2
7 3 1 2 3 5 7 6
6 0 4 5 6 9 3
输出样例
1 2 3 5
0 4 5 6
能不能用数组做
刚刚试了不行
追答
你把原题发来。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//按照你的意思,应该是这样。已经在VC运行过了
#include <stdio.h>
#define N 100
int main()
{
int repeat;//数据组数
int n;//每组数据数字个数
int i, j, m; //循环变量
int a[N][N];//定义一个二维数组
char b[N][N];//将数据存入到字符数组中
/*
原因:
因为所取元素个数不确定,所以需要用‘\0’来判断结束符
*/
printf("您需要输入多少组数据?\n");
scanf("%d", &repeat);
printf("每组数据输入多少个数字?\n");
scanf("%d",&n);
for(i = 0;i < repeat;i++) //存入数据
{
printf("请输入第%d行的数字\n", (i+1));
for(j = 0;j < n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i = 0;i < repeat;i++) //筛选数据
{
for(j = 0,m = 0;j + 1< n;j++)
{
if(a[i][j] < a[i][j+1])
{
b[i][m] = a[i][j] + '0'; //将数据存入b
m++;
}
}
b[i][m] = '\0'; //每行的最后一个置为空
}
for(i = 0;i < repeat;i++) //输出b
{
for(j = 0;b[i][j]!='\0';j++)
{
printf("%c ",b[i][j]);
}
putchar(10); //换行
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询