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();
}
}
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();
}
}
引用chatgpt部分指引作答:
第一题:
运行结果如下:
下面是一个用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.Java:Java的数据类型可分为两大类:
①基本数据类型:byte、short、int、long、double、float、boolean、char
②引用数据类型:类、接口、数组、枚举、注解
~int 类型占四个字节
~常量有final关键字修饰。
~定义float类型时,赋值时一定要在浮点数后加f,否则自动视为double类型,且会编译失败。
~Java中当高精度赋值给低精度类型时,会编译失败,显示不兼容的类型。
~Java中字符型中字符对应的Unicode编码,占2字节,可以保存单个汉字。
~java整数默认为int,超过int类型要加L,建议大写,否则容易和1搞混.,小数默认double.
~java布尔值输出就是false,和true
~java是强类型语言,在基本数据类型的赋值和转化上比较严格
2.C语言:C语言的数据类型可分为:
①基本数据类型:short int、int(由硬件决定可能2字节也可能四字节)、long int、double、float、char、long longint(C99增加)、long double、bool(C99增加)、float_complex、double_complex、long long _complex
②枚举类型:enum
③空类型:void
④派生类型:指针类型(*)、数组类型([])、结构体类型(struct)、共用体类型(union)、函数类型
-常量由#define定义。
-C语言中定义浮点型不会出现java中的问题。
-C语言中当高精度赋值给低精度类型时,会有精度缺失,但并不会造成编译失败。
-C语言中字符型中字符对应ASCII码。
-C语言中char占一个字节,不能保存单个汉字。
~没有boolean类型的变量,正数代表true,非正数代表false
3.标识符
Java:Java标识符有如下命名规则:
1、标识符由字母、数字、 “_”、 “$”组成,且首字母不能是数字(实际上其他语言中的字符也可以);
2、不能把Java关键字作为标识符;
3、标识符没有长度限制;
4、标识符对大小写敏感。
5、自定义标识符最好取具有一定意义的字符串,便于记忆和理解。
C语言:C语言标识符有如下规则:
1、标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中。
2、标识符区分大小写字母
3、标识符的长度,c89规定31个字符以内,c99规定63个字符以内
4、C语言中的关键字,有特殊意义,不能作为标识符
4.运算符
java中"+"还可以作为字符串的连接符.