设计一个算法,将计算机产生的n个随机数分为奇数、偶数两组,并将它们分别压入两个栈中,然后在屏幕上输出。

这个程序用c语言该怎么写啊,没有思路
设计一个算法,将计算机产生的n个随机数分为奇数、偶数两组,并将它们分别压入两个栈中,然后在屏幕上输出。

先定义一个栈结构体,其中包含一个整型数组和一个整型变量top,表示栈的元素和栈顶位置。接下来,定义一些基本的栈操作函数,如初始化栈、判断栈是否为空、判断栈是否已满、压入元素、弹出元素等。
然后使用rand函数生成n个随机数,并将它们分别压入奇数栈和偶数栈中。依次从两个栈中弹出元素并输出。示例代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define STACK_SIZE 100

typedef struct Stack {
    int data[STACK_SIZE];
    int top;
} Stack;

void initStack(Stack* stack) {
    stack->top = -1;
}

int isEmpty(Stack* stack) {
    return stack->top == -1;
}

int isFull(Stack* stack) {
    return stack->top == STACK_SIZE - 1;
}

int push(Stack* stack, int value) {(
    if (isFull(stack)) {
        return 0;
    }
    stack->data[++stack->top] = value;
    return 1;
}

int pop(Stack* stack, int* value) {
    if (isEmpty(stack)) {
        return 0;
    }
    *value = stack->data[stack->top--];
    return 1;
}

int main() {
    Stack oddStack, evenStack;
    initStack(&oddStack);
    initStack(&evenStack);

    srand(time(NULL));
    int n = 10;
    for (int i = 0; i < n; i++) {
        int num = rand() % 100;
        if (num % 2 == 0) {
            push(&evenStack, num);
        } else {
            push(&oddStack, num);
        }
    }

    printf("奇数:\n");
    while (!isEmpty(&oddStack)) {
        int num;
        pop(&oddStack, &num);
        printf("%d ", num);
    }
    printf("\n");

    printf("偶数:\n");
    while (!isEmpty(&evenStack)) {
        int num;
        pop(&evenStack, &num);
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7414701
  • 你也可以参考下这篇文章:【C语言习题】用数组作为函数的参数,将数组中n个整数按相反的顺序存放,要求输入和输出在主函数中完成
  • 除此之外, 这篇博客: c语言:用结构体编写一个函数, 输入一个字符串,能够将字符串内容分解为N个字符串中的 设定内容居中、居左、居右 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    首先,要生成n个随机数。可以使用rand()函数生成随机数,但是生成的随机数可能过于集中在某个区间,需要使用srand()函数初始化随机数生成器。具体实现如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define N 10
    
    int main()
    {
        int a[N], b[N], odd_cnt = 0, even_cnt = 0;
        srand((unsigned)time(NULL)); //初始化随机数生成器
        for(int i = 0; i < N; i++){
            int x = rand()%100; //生成0~99的随机数
            printf("%d ", x); //输出随机数
            if(x%2 == 0){
                b[even_cnt++] = x; //加入偶数栈
            }
            else{
                a[odd_cnt++] = x; //加入奇数栈
            }
        }
        return 0;
    }
    

    接下来,需要将奇数和偶数分别压入两个栈中,并将这两个栈的内容输出到屏幕上。栈可以使用一维数组模拟实现,用一个指针top表示当前栈顶的位置。具体实现如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define N 10
    
    int main()
    {
        int a[N], b[N], odd_cnt = 0, even_cnt = 0;
        int a_top = -1, b_top = -1;
        srand((unsigned)time(NULL)); //初始化随机数生成器
        for(int i = 0; i < N; i++){
            int x = rand()%100; //生成0~99的随机数
            printf("%d ", x); //输出随机数
            if(x%2 == 0){
                b[++b_top] = x; //加入偶数栈
            }
            else{
                a[++a_top] = x; //加入奇数栈
            }
        }
        printf("\n奇数栈:");
        for(int i = a_top; i >= 0; i--){
            printf("%d ", a[i]); //反向输出奇数栈
        }
        printf("\n偶数栈:");
        for(int i = b_top; i >= 0; i--){
            printf("%d ", b[i]); //反向输出偶数栈
        }
        return 0;
    }
    

    完整代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define N 10
    
    int main()
    {
        int a[N], b[N], odd_cnt = 0, even_cnt = 0;
        int a_top = -1, b_top = -1;
        srand((unsigned)time(NULL)); //初始化随机数生成器
        for(int i = 0; i < N; i++){
            int x = rand()%100; //生成0~99的随机数
            printf("%d ", x); //输出随机数
            if(x%2 == 0){
                b[++b_top] = x; //加入偶数栈
            }
            else{
                a[++a_top] = x; //加入奇数栈
            }
        }
        printf("\n奇数栈:");
        for(int i = a_top; i >= 0; i--){
            printf("%d ", a[i]); //反向输出奇数栈
        }
        printf("\n偶数栈:");
        for(int i = b_top; i >= 0; i--){
            printf("%d ", b[i]); //反向输出偶数栈
        }
        return 0; 
    }