void search(int x[],int y,int n)
void main()
{
int a[10],i,key,n
printf("How many numbers you want to input(n<=10):\n")
scanf("%d",&n)
printf("Please input the array!\n")
for(i=0i<ni++)
scanf("%d",&a[i])
puts("The key you want to search:")
scanf("%d",&key)
search(a,key,n)
getch()
}
void search(int x[],int y,int n)
{
int i,j=-1
for(i=0i<ni++)
if(y==x[i])
j=i
if(j!=-1)
{
printf("下标为:%d\n",j)
printf("它是该数列中的第 %d 个数。",j+1)
}
else
printf("NOT FOUNDED!")
}
#include <stdio.h>int main(void)
{
int m,n,i,t,sum,cnt
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=m,cnt=0i<=n++i)
{
for(t=i,sum=0tt/=10)
{
sum+=t%10
}
for(t=itt/=10)
{
if(sum-t%10==t%10)
{
cnt++
printf("%d\n",i)
}
}
}
if(!cnt)
{
printf("No output\n")
}
}
return 0
}
按照你的题目要求,输入一行数字空格分割,回车确认。找出1~最大输入数字间没有出现的数字。
由于输入个数不确认,所以需要动态数组。
下面我的代码,输入任意个数字,输出没有出现的数字。(如果输入了非数字字符,会被程序过滤掉)。代码已详细备注。
#include<stdio.h>
#include<malloc.h>
typedef struct nList
{
int *nums//输入的数组
int len//数组的长度
int maxN//数组中的最大数
}NLIST
NLIST *input()//动态数组输入任意个数的数字,空格分割,回车确认,忽略非数字字符。成功返回包含数组的结构,失败返回NULL
int main()
{
int i,j,flag
NLIST *nlist=NULL
nlist=input()
if(!nlist)
printf("异常!,程序终止!\n")
for(i=1i<nlist->maxNi++)
{
flag=1
for(j=0j<nlist->lenj++)
if(i==nlist->nums[j])
{
flag=0
break
}
if(flag)
printf("%d ",i)
}
printf("\n")
free(nlist->nums)
free(nlist)
return 0
}
NLIST *input()
{
char c
int num=0,maxN=0,len=1,*nums=NULL,*nSave=NULL,flag=0
NLIST *nlist=NULL
while(1)
{
c=getchar()
if(flag &&(c==' ' || c==10))//有输入的情况下遇到空格或回车,保存数字到数组,记录长度和最大值,并重置标识和累加变量
{
if(nums==NULL)
{
nums=(int *)malloc(sizeof(int))
if(!nums)
return NULL
nums[0]=num
maxN=num
len++
}
else
{
nSave=(int *)realloc(nums,sizeof(int)*len)
if(!nSave)
return NULL
nums=nSave
nums[len-1]=num
if(maxN<num)
maxN=num
len++
}
num=0
flag=0
}
if(c==10)//遇到回车,结束输入
break
if(c>='0' &&c<='9')//遇到数字字符,标识输入状态并累加数值
flag=1,num=num*10+c-'0'
}
if(len==1)
return NULL
nlist=(NLIST *)malloc(sizeof(NLIST))
if(!nlist)
return NULL
nlist->len=len-1
nlist->maxN=maxN
nlist->nums=nums
return nlist
}