2401_83754279 2024-05-19 23:32 采纳率: 89.7%
浏览 13
已结题

将两个程序合并在一起,使其中一个是另一个的一个运算功能



#include <stdio.h>
void removeElement(int *arr, int n, int num) {
    for (int i = num; i < n - 1; i++) {
        arr[i] = arr[i + 1];
    }
}
void printArray(int *arr, int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
int main() {
    int m, n;
    printf("Enter the number of tourists (m) and the counting number (n): ");
    scanf("%d %d", &m, &n);
    int *tourists = (int *)malloc(m * sizeof(int));
    for (int i = 0; i < m; i++) {
        tourists[i] = i + 1;
    }
    printf("The remaining tourists are: ");
    printArray(tourists, m);
    int count = 1;
    while (m > 1) {
        if (count % n == 0) {
            removeElement(tourists, m, tourists[count - 1] - 1);
            m--;
        }
        count++;
    }
    printf("The winner is: %d\n", tourists[0]);
    free(tourists);
    return 0;
}

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void removeElement(int *arr, int n, int num);
void palindromeFormation(int num);
void findOddNumber();
bool isPalindrome(int num) {
    int reversed = 0, original = num, remainder;
    while (original != 0) {
        remainder = original % 10;
        reversed = reversed * 10 + remainder;
        original /= 10;
    }
    return num == reversed;
}
int main() {
    int choice;
    do {
        printf("\n请选择功能:\n");
        printf("1. 免费旅行\n");
        printf("2. 回文数的形成\n");
        printf("3. 奇异的三位数\n");
        printf("4. 退出程序\n");
        scanf("%d", &choice);
        int m, n;
        int input;
        switch (choice) {
            case 1:
                printf("请输入游客数量m和报数值n:");
                scanf("%d %d", &m, &n);
                freeTravel(m, n);
                break;
            case 2:
                printf("请输入一个十进制整数:");
                scanf("%d", &input);
                palindromeFormation(input);
                break;
            case 3:
                findOddNumber();
                break;
            case 4:
                printf("感谢使用程序,再见!\n");
                break;
            default:
                printf("无效的输入,请重新选择。\n");
                break;
        }
    } while (choice != 4);
    return 0;
}
void removeElement(int *arr, int n, int num)
{


}

 void palindromeFormation(int num) 
 {
    int reverseNum, addNum;
    char strNum[11], strReverseNum[11], strAddNum[11];
    int isPalindromic = 0;
    while (!isPalindromic) {
        sprintf(strNum, "%d", num);
        strcpy(strReverseNum, strNum);
        int len = strlen(strNum);
        for (int i = 0; i < len/2; i++) {
            char c = strReverseNum[i];
            strReverseNum[i] = strReverseNum[len-i-1]; 
            strReverseNum[len-i-1] = c;
        }
        sscanf(strReverseNum, "%d", &reverseNum);
        addNum = num + reverseNum;
        printf("%d + %d = %d\n", num, reverseNum, addNum); 
        sprintf(strAddNum, "%d", addNum);
        isPalindromic = 1;
        len = strlen(strAddNum);
        for (int i = 0; i < len/2; i++) {
            if (strAddNum[i] != strAddNum[len-i-1]) {
                isPalindromic = 0;
                break;
            }
        }
        num = addNum;
    } 
    printf("回文数为:%d\n", addNum);
}
void findOddNumber() {
    int n, s, t;
    int x2t(int a,int b);
    int re(int a);
    int i;
    for (i = 100; i < 999; i++) {
        n = x2t(i, 7);
        t = re(i);
        s = x2t(t, 9);
        if (n != 0 && s != 0 && n == s) {
            printf("这个奇异的三位数为:七进制:%d,九进制:%d,十进制:%d\n", i, t, n);
            break;
        }
    }
}
int x2t(int n, int x) {
    int t = 0, d = 1, a;
    while (n) {
        a = n % 10;
        if (a >= x)
            return 0;
        t += a * d;
        d *= x;
        n /= 10;
    }
    return t;
}
int re(int n) {
    int s = 0, t;
    while (n) {
        t = n % 10;
        s = t + s * 10;
        n /= 10;
    }
    return s;
}

将第一个程序写入第二个程序中的void removeElement中,使之成为第二个程序的一个运算功能。

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-05-19 23:32
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题分析:

    该问题需要将两个程序合并在一起,其中一个程序是删除数组中指定的元素,另一个程序有多个运算功能。需要将第一个程序加入到第二个程序中,使其成为第二个程序的一个运算功能。

    解决方案:

    1. 在第二个程序中的void removeElement函数中加入第一个程序的代码,用于删除数组中的指定元素。
    2. 在main函数中增加处理删除数组元素的逻辑,即在免费旅行功能中调用removeElement函数来删除数组中指定的元素。
    3. 将其他功能中不需要的代码删除,只保留免费旅行、回文数形成和奇异的三位数三个功能的实现代码即可。

    修改后的代码如下:

    #include <stdio.h>
    #include <stdbool.h>
    #include <string.h>
    void removeElement(int *arr, int n, int num);
    void palindromeFormation(int num);
    void findOddNumber();
    bool isPalindrome(int num) {
        int reversed = 0, original = num, remainder;
        while (original != 0) {
            remainder = original % 10;
            reversed = reversed * 10 + remainder;
            original /= 10;
        }
        return num == reversed;
    }
    int main() {
        int choice;
        do {
            printf("\n请选择功能:\n");
            printf("1. 免费旅行\n");
            printf("2. 回文数的形成\n");
            printf("3. 奇异的三位数\n");
            printf("4. 退出程序\n");
            scanf("%d", &choice);
            int m, n;
            int input;
            int count;
            switch (choice) {
                case 1:
                    printf("请输入游客数量m和报数值n:");
                    scanf("%d %d", &m, &n);
                    int *tourists = (int *)malloc(m * sizeof(int));
                    for (int i = 0; i < m; i++) {
                        tourists[i] = i + 1;
                    }
                    printf("The remaining tourists are: ");
                    for (int i = 0; i < m; i++) {
                        printf("%d ", tourists[i]);
                    }
                    printf("\n");
                    count = 1;
                    while (m > 1) {
                        if (count % n == 0) {
                            removeElement(tourists, m, tourists[count - 1] - 1);
                            m--;
                        }
                        count++;
                    }
                    printf("The winner is: %d\n", tourists[0]);
                    free(tourists);
                    break;
                case 2:
                    printf("请输入一个十进制整数:");
                    scanf("%d", &input);
                    palindromeFormation(input);
                    break;
                case 3:
                    findOddNumber();
                    break;
                case 4:
                    printf("感谢使用程序,再见!\n");
                    break;
                default:
                    printf("无效的输入,请重新选择。\n");
                    break;
            }
        } while (choice != 4);
        return 0;
    }
    
    void removeElement(int *arr, int n, int num) {
        for (int i = num; i < n - 1; i++) {
            arr[i] = arr[i + 1];
        }
    }
    
    void palindromeFormation(int num) {
        int reverseNum, addNum;
        char strNum[11], strReverseNum[11], strAddNum[11];
        int isPalindromic = 0;
        while (!isPalindromic) {
            sprintf(strNum, "%d", num);
            strcpy(strReverseNum, strNum);
            int len = strlen(strNum);
            for (int i = 0; i < len/2; i++) {
                char c = strReverseNum[i];
                strReverseNum[i] = strReverseNum[len-i-1]; 
                strReverseNum[len-i-1] = c;
            }
            sscanf(strReverseNum, "%d", &reverseNum);
            addNum = num + reverseNum;
            printf("%d + %d = %d\n", num, reverseNum, addNum); 
            sprintf(strAddNum, "%d", addNum);
            isPalindromic = 1;
            len = strlen(strAddNum);
            for (int i = 0; i < len/2; i++) {
                if (strAddNum[i] != strAddNum[len-i-1]) {
                    isPalindromic = 0;
                    break;
                }
            }
            num = addNum;
        } 
        printf("回文数为:%d\n", addNum);
    }
    
    void findOddNumber() {
        int n, s, t;
        int x2t(int a,int b);
        int re(int a);
        int i;
        for (i = 100; i < 999; i++) {
            n = x2t(i, 7);
            t = re(i);
            s = x2t(t, 9);
            if (n != 0 && s != 0 && n == s) {
                printf("这个奇异的三位数为:七进制:%d,九进制:%d,十进制:%d\n", i, t, n);
                break;
            }
        }
    }
    
    int x2t(int n, int x) {
        int t = 0, d = 1, a;
        while (n) {
            a = n % 10;
            if (a >= x)
                return 0;
            t += a * d;
            d *= x;
            n /= 10;
        }
        return t;
    }
    
    int re(int n) {
        int s = 0, t;
        while (n) {
            t = n % 10;
            s = t + s * 10;
            n /= 10;
        }
        return s;
    }
    

    其中,原本的免费旅行程序的代码加入到了switch中,在程序执行到case 1时执行;在void removeElement函数中加入了删除数组元素的代码,与原本程序相同;其他功能的实现代码与原本程序相同,但在main函数中删除了不需要的代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月19日