[i] [0]、a [i + 1] [0]について、2次元配列a [n] [2] a [i] [1]、a [i + 1] [1]を減少させる。 qsortは整数配列では正常に動作しますが、長いlong配列では動作しません。qsortがlong longで正常に動作しない
整数配列コード
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
int cmpfunc(const void* a, const void* b)
{
int x = ((int*)a)[0] - ((int*)b)[0];
if (x != 0) {
return x;
}
return ((int*)a)[1] - ((int*)b)[1];
}
int main(int argc, char const* argv[])
{
int n, i, j;
scanf("%d", &n);
int a[n][2];
for (i = 0; i < n; i = i + 1) {
scanf("%d %d", &a[i][0], &a[i][1]);
}
qsort(a, n, sizeof(a[0]), cmpfunc);
for (i = 0; i < n; i = i + 1) {
printf("%d %d\n", a[i][0], a[i][1]);
}
return 0;
}
長い長い配列コード
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
int cmpfunc(const void* a, const void* b)
{
int x = ((int*)a)[0] - ((int*)b)[0];
if (x != 0) {
return x;
}
return ((int*)a)[1] - ((int*)b)[1];
}
int main(int argc, char const* argv[])
{
int n, i, j;
scanf("%d", &n);
long long a[n][2];
for (i = 0; i < n; i = i + 1) {
scanf("%I64d %I64d", &a[i][0], &a[i][1]);
}
qsort(a, n, sizeof(a[0]), cmpfunc);
for (i = 0; i < n; i = i + 1) {
printf("%I64d %I64d\n", a[i][0], a[i][1]);
}
return 0;
}
入力:最初のコードの
5
4 3
4 2
4 1
4 1
4 1
出力:
第二のコードのための出力:
4 2
4 1
4 1
4 1
4 3
を、あなたが何かを忘れていませんか?特に比較機能では? 'a'と' b'の実際のタイプは何ですか? –
コードのデバッグ方法を学ぶことをお勧めします。まず、変数の値を表示するために 'printf()'ステートメントを追加します。 –
@Someprogrammerdudeどのように重要ですか?入力はまだint型の範囲ですが、int型でも正しく動作しますか? – Vishal