数字 含む含まれない
n個の整数を含む数列Sと、q個の異なる整数を含む数列Tが与えられるとき、
Tに含まれる整数の中でSに「含まれない」ものを空白区切りで列挙し(c個の整数を含む数列Vとする)、
さらに個数cを出力しなさい。
入力: 1行目にn、2行目にSを表すn個の空白区切りの整数、3行目にq、4行目にTを表すq個の空白区切りの整数、および改行
出力: Vを空白区切りの数列として出力し(要素数0の場合は空行)、改行して、cを出力し、改行して終わること。
制約: n <= 10,000, q <= 500, 0 <= S,Tの要素 <= 1,000,000,000, Tの要素は互いに異なる
入力例1
5
1 2 3 4 5
3
3 6 1
出力例1
6
1
(改行して終わること)
入力例2
1
1
1
1
出力例2
0
解答は以下のソースコードになります。
#include <stdio.h> int main(void){ int i,n1,num,n2; int data1[10000],ans[10000],len=0;; scanf("%d",&n1); for(i=0;i<n1;i++){ scanf("%d",&data1[i]); } scanf("%d",&n2); for(i=0;i<n2;i++){ scanf("%d",&num); compNum(data1,num,ans,&len,n1); } if(len>0){ printf("%d",ans[0]); } for(i=1;i<len;i++){ printf(" %d",ans[i]); } printf("\n"); printf("%d",len); return 0; } void compNum(int data[10000], int num, int ans[10000],int *len,int n1){ int i=0,flag=0;; for(i=0;i<n1;i++){ if(data[i]==num){ flag=1; break; } } if(flag == 0){ ans[*len] = num; (*len)++; } return; }