vztvzt 2023-05-16 14:14 采纳率: 82.4%
浏览 47
已结题

Java代码转换成C语言代码

1.独立元素


import java.io.BufferedInputStream;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(new BufferedInputStream(System.in));
        int n = s.nextInt();
        long[] a = new long[n];
        for (int i = 0; i < n; i++) {
            a[i] = s.nextLong();
        }
        //Set防重复
        Set<Long> c = new HashSet<>();
        for (long i : a) {
            c.add(i);
        }
        Long[] b = new Long[c.size()];
        c.toArray(b);
        Arrays.sort(b);
        System.out.print(b[b.length-1]);
        //按照空格顺序输出
        for (int i = 1; i < b.length; i++) {
            System.out.printf(" %d",b[b.length-1-i]);
        }
        System.out.println();
    }
}

img

2.字符串映射


import java.io.BufferedInputStream;
import java.util.*;

public class Main {
    //映射
    public static String Map(String c) {
        //删掉重复元素
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < c.length(); i++) {
            char d = c.charAt(i);
            if (c.indexOf(d) == c.lastIndexOf(d)){
                sb.append(d);
            }
            else {
                int FirstPosition = c.indexOf(d);
                if (FirstPosition == i) {
                    sb.append(d);
                }
            }
        }
        return String.valueOf(sb);
    }
    public static void main(String[] args) {
        Scanner s = new Scanner(new BufferedInputStream(System.in));
        String a = s.nextLine();
        String b = s.nextLine();
        int[] arr1 = new int[26];
        int[] arr2 = new int[26];
        //得到a、b中每个字母的个数
        for(int i = 0; i < a.length(); i++) {
            arr1[a.charAt(i) - 'A']++;
            arr2[b.charAt(i) - 'A']++;
        }
        //判定两数组的对应情况
        for(int i = 0; i < a.length(); i++) {
            if(arr1[a.charAt(i) - 'A'] != -1) {
                for(int j = 0; j < 26; j++) {
                    if(arr2[j] == arr1[a.charAt(i) - 'A']) {
                        arr1[a.charAt(i) - 'A'] = -1;
                        arr2[j] = -1;
                        break;
                    }
                }
            }
            //输出NO
            if(arr1[a.charAt(i) - 'A'] != -1) {
                System.out.println("NO");
                //正常退出,程序正常执行结束退出;1为非正常,强行退出
                System.exit(0);   
            }
        }
        System.out.println("YES");
        String deleteA = Map(a);
        String deleteB = Map(b);
        //输出映射
        for (int i = 0; i <deleteA.length()-1 ; i++) {
            System.out.print(deleteA.charAt(i)+"->"+deleteB.charAt(i)+" ");
        }
        System.out.println(deleteA.charAt(deleteA.length()-1)+"->"+deleteB.charAt(deleteB.length()-1));
        s.close();
    }
}

img

  • 写回答

2条回答 默认 最新

  • CF2301_77400554X 2023-05-16 14:37
    关注

    引用chatgpt部分指引作答:
    第一题:
    运行结果如下:

    img

    下面是一个用C语言编写的控制台程序,用于按照要求从大到小输出独立元素。

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int N;
        printf("请输入正整数N:");
        scanf("%d", &N);
    
        int *arr = (int *)malloc(N * sizeof(int));
        if (arr == NULL) {
            printf("内存分配失败");
            return 1;
        }
    
        printf("请输入%d个整数,以空格分隔:", N);
        for (int i = 0; i < N; i++) {
            scanf("%d", &arr[i]);
        }
    
        // 对数组进行排序(冒泡排序)
        for (int i = 0; i < N - 1; i++) {
            for (int j = 0; j < N - 1 - i; j++) {
                if (arr[j] < arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    
        // 输出独立元素
        printf("输出结果:");
        printf("%d ", arr[0]);
        for (int i = 1; i < N; i++) {
            if (arr[i] != arr[i - 1]) {
                printf("%d ", arr[i]);
            }
        }
    
        free(arr); // 释放动态分配的内存
    
        return 0;
    }
    

    请注意,这段代码假设输入的整数都在int类型的表示范围内,并且输入的整数个数满足要求(1 < N ≤ 10000)。此外,这段代码使用了冒泡排序算法对输入的整数数组进行排序,然后输出独立元素。

    第二题:
    以下是一个使用C语言编写的控制台代码,实现了字符串映射的功能:

    #include <stdio.h>
    #include <string.h>
    
    void mapString(char* str1, char* str2) {
        int i, j;
        int map[26];  // 存储字母映射关系的数组
        
        // 初始化映射数组为-1,表示尚未映射
        for (i = 0; i < 26; i++) {
            map[i] = -1;
        }
        
        // 判断是否可以映射
        for (i = 0; i < strlen(str1); i++) {
            int index1 = str1[i] - 'A';  // 字母在映射数组中的索引
            int index2 = str2[i] - 'A';  // 字母在映射数组中的索引
            
            // 如果当前字母已经映射过了
            if (map[index1] != -1) {
                // 如果映射结果与str2中的字母不一致,映射失败
                if (map[index1] != index2) {
                    printf("NO\n");
                    return;
                }
            } else {
                // 如果当前字母尚未映射,则进行映射
                map[index1] = index2;
            }
        }
        
        // 输出映射结果
        printf("YES\n");
        for (i = 0; i < 26; i++) {
            if (map[i] != -1) {
                printf("%c->%c ", 'A' + i, 'A' + map[i]);
            }
        }
    }
    
    int main() {
        char str1[101];
        char str2[101];
        
        // 读取输入的两个字符串
        fgets(str1, sizeof(str1), stdin);
        fgets(str2, sizeof(str2), stdin);
        
        // 去除换行符
        str1[strcspn(str1, "\n")] = '\0';
        str2[strcspn(str2, "\n")] = '\0';
        
        // 判断字符串映射
        mapString(str1, str2);
        
        return 0;
    }
    

    使用该代码,您可以在控制台输入两个字符串,并得到相应的输出结果。请注意,该代码假定输入的字符串由大写字母A-Z构成,并且长度不超过100。

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

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日