我需要从标准输入中读取要分析的自然数N,然后程序必须读取这N个数,并在标准输出的一行中打印出可以分析的自然数,方法是移动记录中的数字,将其转换为读取的其他数字之一。
示例:键盘输入:6
25 21 10242 42210 52 24021
输出:5
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef unsigned long long int cache;
int cmp(const void * a, const void * b) {
return ( * (int * ) a - * (int * ) b);
}
int main() {
int n, i, j, count_equals = 0;
char num[22];
scanf("%d", & n);
cache * A = (cache * ) malloc(n * sizeof(cache));
for (i = 0; i < n; i++) {
scanf("%s", num);
qsort(num, strlen(num), sizeof(char), cmp);
for (A[i] = num[--j] - '0'; --j >= 0; A[i] = A[i] * 10 + (num[j] - '0'));
}
qsort(A, n, sizeof(cache), cmp);
for (j = 0, i = 1; i < n; i++) {
if (A[i] == A[i - 1]) {
count_equals++;
} else if (count_equals) {
j += ++count_equals, count_equals = 0;
}
}
if (count_equals) {
j += ++count_equals;
}
free(A);
printf("%d\n", j);
return 0;
}
问题是:它没有得到/计算更长的数字,而且qsort()可能不是这里的最佳解决方案。
你有什么建议?
1条答案
按热度按时间pgvzfuti1#
不能对
char
和cache
数组使用相同的比较函数。比较函数需要将void*
参数强制转换为它们的实际类型。然后,每次调用
qsort()
时使用正确的值