HDU 1412 {A} + {B}

来源:互联网 发布:淘宝实拍保护怎么破解 编辑:程序博客网 时间:2024/06/05 06:22

第一次把c数组开小了,忽略了当n,m等于10000时需要一个比较大的数组


思路是将两个数组元素复制到另一个数组,然后进行排序,将重复的元素用一个数组记录下来,然后进行遍历,一旦重复就跳过。输出即可

注意输出的格式



#include<stdio.h>#include<string.h>void sort(int * num, int n){  int temp;  for (int i = 0; i < n-1; i++) {    for (int j = i+1; j < n; j++) {      if (num[i] > num[j]) {        temp = num[i];        num[i] = num[j];        num[j] = temp;      }    }  }}int main(void){  int a[10005], b[10005], c[20015], repeate[20005];  int n, m, i, k, j, flag;  while (scanf("%d %d", &n, &m) != EOF && n && m) {    flag = 0;    for (int i = 0; i < n; i++) {      scanf("%d", &a[i]);    }    for (int i = 0; i < m; i++) {      scanf("%d", &b[i]);    }    for (i = 0, k = 0; i < n + m; i++) {      if (i < n) {        c[i] = a[i];      } else {        c[i] = b[k++];      }    }    c[i] = '\0';    sort(c, n+m);    for (i = 0, k = 0; i < n + m; i++) {      if (c[i] == c[i+1]) {        repeate[k++] = i+1;      }    }    if (k > 0) {      for (i = 0; i < m+n; i++) {        for (j = 0; j < k; j++) {          if (i == repeate[j]) {            flag = 0;            break;          } else {            flag = 1;          }        }        if (flag) {          if (i == 0) {            printf("%d", c[i]);          } else {            printf(" %d", c[i]);          }        }      }    } else {      for (i = 0; i < m+n; i++) {        if (i == 0) {            printf("%d", c[i]);          } else {            printf(" %d", c[i]);          }      }    }    putchar('\n');  }  return 0;}


原创粉丝点击