集合の問題
2453 ワード
タイトルの説明
2つの線形テーブルLAとLBがそれぞれ2つの集合AとB(すなわち、線形テーブルのデータ要素は集合のメンバーである)を表すと仮定し、新しい集合A=A≦Bが要求される.これは、線形テーブルLAを拡大し、線形テーブルLBに存在し、線形テーブルLAに存在しないデータ要素を線形テーブルLAに挿入する操作を必要とする.線形テーブルLBから各要素を順次取得し、値に応じて線形テーブルLAにおいてルックアップを行い、存在しなければ挿入する.上記の操作手順は、以下のアルゴリズムで説明することができる.
図:二つのリストを結合するアルゴリズム(C/C++説明)
上図のアルゴリズムでは、8行目に集合Bの要素を取得し、10行目に集合Aに挿入する.あなたのタスクは、まず集合Aと集合Bの要素を出力し、各集合は1行で出力します.次に、集合Aの末尾に挿入された要素を集合Bの要素から取り出すたびに、集合Aの要素が出力される.もちろん、あなたのコードは上のコードとは違ってもいいです.同じ出力があればいいです.
入力
複数のテストデータがあり、各テストデータが2行を占めています.1行目は集合Aであり、1番目の整数m(0しゅつりょく
各テストデータのセットはn+2行を出力する:前の2行はそれぞれ集合A、集合Bのデータを出力し、後のn行はBから要素を取り出してAの末尾に挿入した後の集合Aである.各行の整数間はスペースで区切られ、各テストデータ間は1行の空白行で区切られます.
サンプル入力
5 1 5 2 6 33 1 7 91 32 2 74 2 5 1 44 1 2 4 5
サンプル出力
1 5 2 6 31 7 91 5 2 6 31 5 2 6 3 71 5 2 6 3 7 932 73 23 2 72 5 1 41 2 4 52 5 1 42 5 1 42 5 1 42 5 1 4
チェーン時計が下手で面倒くさいので配列で作りました
2つの線形テーブルLAとLBがそれぞれ2つの集合AとB(すなわち、線形テーブルのデータ要素は集合のメンバーである)を表すと仮定し、新しい集合A=A≦Bが要求される.これは、線形テーブルLAを拡大し、線形テーブルLBに存在し、線形テーブルLAに存在しないデータ要素を線形テーブルLAに挿入する操作を必要とする.線形テーブルLBから各要素を順次取得し、値に応じて線形テーブルLAにおいてルックアップを行い、存在しなければ挿入する.上記の操作手順は、以下のアルゴリズムで説明することができる.
図:二つのリストを結合するアルゴリズム(C/C++説明)
上図のアルゴリズムでは、8行目に集合Bの要素を取得し、10行目に集合Aに挿入する.あなたのタスクは、まず集合Aと集合Bの要素を出力し、各集合は1行で出力します.次に、集合Aの末尾に挿入された要素を集合Bの要素から取り出すたびに、集合Aの要素が出力される.もちろん、あなたのコードは上のコードとは違ってもいいです.同じ出力があればいいです.
入力
複数のテストデータがあり、各テストデータが2行を占めています.1行目は集合Aであり、1番目の整数m(0
各テストデータのセットはn+2行を出力する:前の2行はそれぞれ集合A、集合Bのデータを出力し、後のn行はBから要素を取り出してAの末尾に挿入した後の集合Aである.各行の整数間はスペースで区切られ、各テストデータ間は1行の空白行で区切られます.
サンプル入力
5 1 5 2 6 33 1 7 91 32 2 74 2 5 1 44 1 2 4 5
サンプル出力
1 5 2 6 31 7 91 5 2 6 31 5 2 6 3 71 5 2 6 3 7 932 73 23 2 72 5 1 41 2 4 52 5 1 42 5 1 42 5 1 42 5 1 4
チェーン時計が下手で面倒くさいので配列で作りました
#include<stdio.h>
#include<string.h>
int a[100000],b[100000];
int main(){
int i,j;
int m,n;
while(~scanf("%d",&m)){
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
for(i=0;i<m;i++){
scanf("%d",&a[i]);
}
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
for(i=0;i<m-1;i++){
printf("%d ",a[i]);
}
printf("%d
",a[m-1]);
for(i=0;i<n-1;i++){
printf("%d ",b[i]);
}
printf("%d
",b[n-1]);
int flag;
int ans=0;
for(i=0;i<n;i++){
flag=1;
for(j=0;j<m+ans;j++){
if(b[i]==a[j]){
flag=0;
break;
}
}
if(flag==1){
ans++;
a[m-1+ans]=b[i];
}
for(j=0;j<m-1+ans;j++){
printf("%d ",a[j]);
}
printf("%d
",a[m-1+ans]);
}
printf("
");
}
return 0;
}