【問題描述】
從標準輸入中輸入兩行整數(每行不超過20個整數),將第一組中所有出現在第二組中的數字洗掉(即兩整數集相減)。并從小到大排序輸出。
【輸入形式】
首先輸入第一組整數的個數,再輸入第一組整數,以空格分隔;然后輸入第二組整數的個數,再輸入第二組整數,以空格分隔。
【輸出形式】
將第一組中所有出現在第二組中的數字洗掉,按從小到大順序排序輸出,輸出整數中間用一個空格隔開。
【樣例輸入】
8
5 1 4 3 8 7 9 6
4
5 2 8 10
【樣例輸出】
1 3 4 6 7 9
【樣例說明】
第一組整數個數為8,分別為5 1 4 3 8 7 9 6,第二組整數個數為4,分別為5 2 8 10。將第一組中所有出現在第二組中的數字(即數字5和8)洗掉后結果1 3 4 6 7 9(按從小到大順序排序)。每個數字中間用一個空格分隔。
【評分標準】
該題要求輸出整數運算式的計算結果,共有5個測驗點。上傳C語言檔案名為exam2.c。
#include<stdio.h>
#include<malloc.h>
void main()
{
void counter(int a[],int len1,int b[],int len2);
int n,z;
int i,j;
scanf("%d %d",&n,&z);
int* a = (int *)malloc(sizeof(int)* n);
int* b = (int *)malloc(sizeof(int) * z);
for(i=0;i<n;i++){
scanf("%d",a+i);
}
for(i=0;i<z;i++)
{
scanf("%d",b+i);
}
counter(a,n,b,z);
}
void counter(int a[],int len1,int b[],int len2)
{
int i,j,q,t,y,o,l,k,u,v;
u=59;
int w[60];
//將兩個陣列整合
for(i=0;i<len1;i++)
w[i]=a[i];
j=i;
for(j=0;j<len2;j++,i++)
w[i]=b[j];
//將陣列排序
for(q=0;q<u;q++)
for(t=0;t<u-q;t++)
if(w[t]>w[t+1])
{
o=w[t];
w[t]=w[t+1];
w[t+1]=o;
}
//將陣列去重
for(l=0;l<u;l++)
{
for(k=l+1;k<=u;k++)
{
if(w[l]=w[k])
{
for(y=k;y<=u;y++)
{
w[y]=w[y+1];
}
u--;
k--;
}
}
}
for(v=0;v<60;v++)
printf("%d",w[v]);
}
編譯器不報錯,但是輸入完之后就停止作業了
uj5u.com熱心網友回復:
跟蹤除錯一下,看死在哪里uj5u.com熱心網友回復:
if(w[l]=w[k])這個應該是你手誤了,應該是==
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/66142.html
標籤:C語言
上一篇:初學者,撰寫函式找最大值和最小值
下一篇:C++題目求問
