UVa 10474 大理石在哪?

来源:互联网 发布:怎么在阿里云建数据库 编辑:程序博客网 时间:2024/06/10 12:40

思路:保存前一组数据,排序,后一组数据在前组数据中查找。

注意:题中,Be assured, none of the input numbers are greater than 10000 and none of them are negative.这句话意思是输入的每个数字都不会超过10000,所以输入规模在10000。(我本来以为这是每组数据的数字,没提到输入规模呢,输入规模前面有提到每组都不会少于65。结果我开100、1000的数组都是RE,开10010是WA。  另外,对于第二组要找的数,不必保存,可以读一个找一个)

qsort中的比较函数cmp的参数是const void * 指针,而且在函数里进行类型转化时,不要忘了转换成(int *) 或(char *)等型的指针,我怎么给转换成了(int)!!

很简单的一个题,自己做得不是很好,交了几次。。

Code:

#include<stdio.h>#include<stdlib.h>#include<string.h>int cmp_int(const void *_a, const void *_b); int marb[10010];int gues[10010];int main(){ int n,q;    int cs=0;  while((scanf("%d%d",&n,&q)==2)&&(n!=0||q!=0)) {  cs++;  memset(marb,0,sizeof(marb));  memset(gues,0,sizeof(gues));   for(int i=0;i<n;++i)   scanf("%d",&marb[i]);    for(int i=0;i<q;++i)   scanf("%d",&gues[i]);     qsort(marb,n,sizeof(int),cmp_int);          /*for(int i=0;i<n;++i)   printf("%d ",marb[i]);  printf("\n");  for(int i=0;i<q;++i)   printf("%d ",gues[i]);  printf("\n");*/    printf("CASE# %d:\n",cs);  for(int i=0;i<q;++i)  {//遍历gues    bool flag=1;//默认没找到    for(int j=0;j<n;++j)   {//遍历marb     if(gues[i]==marb[j])    { printf("%d found at %d\n",gues[i],j+1); flag=0; break;}    else if(gues[i]<marb[j]) break;          }//for   if(flag) printf("%d not found\n",gues[i]);         } }//while //system("pause"); return 0;}int cmp_int(const void *_a, const void *_b){ int* a=(int*)_a;//注意这里是指针,刚开始写的时候括号里竟然是int...  int* b=(int*)_b; return *a-*b;   }

//版本2,不保存要找的数据,输入一个,查找一个 #include<stdio.h>#include<stdlib.h>#include<string.h>int cmp_int(const void *_a, const void *_b); void search(int gues, int n);int marb[10010];int main(){ int n,q;    int cs=0;  while((scanf("%d%d",&n,&q)==2)&&(n!=0||q!=0)) {  cs++;  memset(marb,0,sizeof(marb));   for(int i=0;i<n;++i)   scanf("%d",&marb[i]);   qsort(marb,n,sizeof(int),cmp_int);          printf("CASE# %d:\n",cs);    int gues;  for(int i=0;i<q;++i)  {   scanf("%d",&gues);   search(gues,n);         }    /*for(int i=0;i<n;++i)   printf("%d ",marb[i]);  printf("\n");  for(int i=0;i<q;++i)   printf("%d ",gues[i]);  printf("\n");*/  }//while //system("pause"); return 0;}void search(int gues, int n){ bool flag=1;//默认没找到  for(int j=0;j<n;++j) {//遍历marb   if(gues==marb[j])  { printf("%d found at %d\n",gues,j+1); flag=0; break;}  else if(gues<marb[j]) break;        }//for if(flag) printf("%d not found\n",gues);}int cmp_int(const void *_a, const void *_b){ int* a=(int*)_a;//注意这里是指针,刚开始写的时候括号里竟然是int...  int* b=(int*)_b; return *a-*b;   }


0 0
原创粉丝点击