第1个回答 2011-10-29
#include <stdio.h>
void main()
{
int arr[16]={0},i,count,elem,non[15],one[15],more[15];
int j=0,k=0,l=0,num;
printf("请输入数字的个数\n");
scanf("%d",&count);
num=count;
printf("请输入1~15之间的数字\n");
while(num--)
{
scanf("%d",&elem);
arr[elem]++;
}
for(i=1;i<=15;i++)
switch(arr[i])
{
case 0:non[j++]=i;break;
case 1:one[k++]=i;break;
default:more[l++]=i;break;
}
printf("大于2次的是:");
for(i=0;i<l;i++)
printf("%d ",more[i]);
printf("\n等于1次的是:");
for(i=0;i<k;i++)
printf("%d ",one[i]);
printf("\n没有出现的是:");
for(i=0;i<j;i++)
printf("%d ",non[i]);
printf("\n");
}
第2个回答 2011-10-29
程序如下,这组数字的范围由输入的数字的最小值和最大值确定,输入若干整数,用CTRL+Z结束输入.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int index;
int cnt;
} node;
node * add(node *ms,int *size,int d)
{
int i;
if (ms==NULL) {
ms=malloc(sizeof(node));
++*size;
ms->index=d;
ms->cnt=1;
}
else if (d>ms[*size-1].index) {
ms=realloc(ms,sizeof(node)*(++*size));
ms[*size-1].index=d;
ms[*size-1].cnt=1;
}
else
{
for (i = 0; i<*size; i++) {
if (d==ms[i].index) {
++ms[i].cnt;
break;
}
}
if (i==*size)
{
ms=realloc(ms,sizeof(node)*(++*size));
while (i&&d<ms[i-1].index)
{
ms[i]=ms[i-1] ;
i--;
}
ms[i].index=d;
ms[i].cnt=1;
}
}
return ms;
}
int main(void)
{
node *nms=NULL;
int i,ind,size=0;
while (scanf("%d",&ind)!=EOF)
nms=add(nms,&size,ind);
printf("大于等于2次的是:");
for (i=0; i<size; i++)
if (nms[i].cnt>=2) printf("%d ",nms[i].index);
printf("\n等于1次的是:");
for (i=0; i<size; i++)
if (nms[i].cnt==1) printf("%d ",nms[i].index);
printf("\n没有出现的是:");
for (i=1; i<size; i++) {
if (nms[i].index-nms[i-1].index>1)
for (ind=nms[i-1].index+1; ind<nms[i].index; ind++)
printf("%d ",ind);
}
putchar('\n');
free(nms);
return 0;
}
//---------------------------------------------------------------------------