Submission
Status:
PPP-PPPP-P
Subtask/Task Score:
80/100
Score: 80
User: theem1502
Problemset: จับคู่เลขมงคล
Language: c
Time: 0.003 second
Submitted On: 2025-09-20 14:53:42
#include <stdio.h>
#include <stdlib.h>
int main() {
int num;
scanf("%d", &num);
int luckynumber;
int *thearray = malloc(num * sizeof(int));
for (int i = 0; i < num; i++) {
scanf("%d", &thearray[i]);
}
int *copiedarray = malloc(num * sizeof(int));
for (int i = 0; i < num; i++) {
copiedarray[i] = thearray[i];
}
scanf("%d", &luckynumber);
for (int i = 0; i < num; i++) {
for (int j = i+1; j< num; j++)
{
if (thearray[j] < thearray[i]) {
int temp = thearray[i];
thearray[i] = thearray[j];
thearray[j] = temp;
}
} }
int firstpointer = 0;
int secondpointer = num-1;
int **destinationarray = malloc(num*sizeof(int*));
for (int i = 0; i < num; i++) {
destinationarray[i] = malloc(2 * sizeof(int));
}
int *used = malloc(num * sizeof(int));
for (int i = 0; i < num; i++) {
used[i] = 0;
}
int temp = 0;
for (int i = 0; i < num; i++) {
if (firstpointer >= secondpointer) {
break;
}
int sum = thearray[firstpointer] + thearray[secondpointer];
if (sum == luckynumber && used[firstpointer] == 0 && used[secondpointer] == 0) {
destinationarray[temp][0] = thearray[secondpointer];
destinationarray[temp][1] = thearray[firstpointer];
used[firstpointer] = 1;
used[secondpointer] = 1;
secondpointer -= 1;
temp++;
continue;
}
else if(sum > luckynumber) {
secondpointer-=1;
}
else {
firstpointer += 1;
}
}
if (temp == 0) {
printf("%s", "No");
return 0;
}
int *check = malloc(temp * sizeof(int));
for (int i = 0; i < temp; i++) {
for (int j = 0; j < num; j++) {
if (copiedarray[j] == destinationarray[i][0]) {
check[i] = 0;
break;
}
if (copiedarray[j] == destinationarray[i][1]) {
check[i] = 1;
break;
}
}
}
for (int i = 0; i < temp; i++) {
if (check[i] == 0) {
printf("%d %d\n", destinationarray[i][0], destinationarray[i][1]);
}
else {
printf("%d %d\n", destinationarray[i][1], destinationarray[i][0]);
}
}
}