查找

来源:互联网 发布:淘宝seo技巧 编辑:程序博客网 时间:2024/05/01 01:15

三个查找题目,做的还是比较顺利,一次性被服务器AC!


http://ac.jobdu.com/problem.php?pid=1126

/** * 1、定义的极值的下标包括0,与最后 * 2、每组下标之间空格分开 * 3、多组测试之间无空行 * 4、数全相同怎么办呢? * 5、提交后AC了,说明了测试数据中必定都有极值。把4的情况排除了。 *    题目没有给出没有极值的情况的反应,也暗示了是可处理的数据。 **/   #include <stdio.h>   int main(){    #ifdef ONLINE_JUDGE    #else    freopen("E:\\in.txt", "r", stdin);    #endif         int n;    while (scanf("%d", &n) != EOF){        while(n-- > 0){            int k;            scanf("%d", &k);            int buf[100];            for (int i=0; i<k; i++){                scanf("%d", &buf[i]);            }// k 个数据                         bool firstIndex = true;            for (int i = 0; i <k; i++){                if (i > 0 && i < k-1){                    if ((buf[i] > buf[i-1] && buf[i] > buf[i+1])||(buf[i] < buf[i-1] && buf[i] < buf[i+1])){                        if (firstIndex == true){                            firstIndex = false;                            printf("%d", i);                        }                        else                            printf(" %d", i);                    }// 判断,输出                }                else if (i == 0){                    if (buf[0] != buf[1]){                        if (firstIndex == true){                            firstIndex = false;                            printf("%d", i);                        }                        else                            printf(" %d", i);                    }                }// 判断,输出                else{                    if (buf[k-1] != buf[k-2]){                        if (firstIndex == true){                            firstIndex = false;                            printf("%d", i);                        }                        else                            printf(" %d", i);                    }                }// 判断,输出            }// 处理本组            printf("\n");        }// n 组数据    }// while : zu         return 0; }


http://ac.jobdu.com/problem.php?pid=1173

/** * 数组len:n * 格式:a[1...n] *  * 1、对于要查找的值,不必作为数组,读一个查一个即可。 * 2、输入数据无序,先排序,二分查找 * 3、没让输出数组小标,没必要按给定格式 * 4、YES,NO后要换行 **/  #include <stdio.h> #include <algorithm>  using namespace std;  int main() {int n;while (scanf("%d", &n) != EOF){int buf[110];for (int i = 0; i < n; i++){scanf("%d", &buf[i]);} // read datasort(buf, buf+n);// sortint m;scanf("%d", &m);while(m-- > 0){int key;scanf("%d", &key);// 折半查找算法int high = n-1;int low = 0;int mid;while (low <= high){mid = (low + high)/2;if (buf[mid] == key){printf("YES\n");break;}else if(buf[mid] < key)low = mid + 1;else high = mid - 1;}// whileif (low > high)printf("NO\n");// 折半查找结束}// while}// while: zureturn 0; }  



 

http://ac.jobdu.com/problem.php?pid=1069

// 好多人说因为给id,name开的空间小错误了。但是测试id开10个是没有问题// 名字要开100,所以给自己提个醒吧,开大点!你不知道服务那边的测试数据// 多么变态!///**//--资料库int n;struct S{int id; //例子给的是2为,但可能有几百学生,所以,学号位数不定,我们改为char *char name[20];char sex;int age;};//--查询int m;int ID;*/#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;struct S{char id[100]; //2 位, caution: printchar name[20];char sex[5];int age;bool operator < (const S & A) const{return strcmp(id, A.id) < 0;}} buf[1000];int main(){int n;while (scanf("%d", &n) != EOF){for (int i = 0; i < n; i++){scanf("%s %s %s %d", &buf[i].id, &buf[i].name, &buf[i].sex, &buf[i].age);} // [0,n-1]int m;scanf("%d", &m);while (m-- > 0){int ID;scanf("%d", &ID);// 二分查找开始int high = n-1;int low = 0;int mid;while (low <= high){mid = (low + high)/2;if (strcmp(buf[mid].id, ID) ==0){printf("%s %s %s %d\n", buf[mid].id, buf[mid].name, buf[mid].sex, buf[mid].age);break;}else if(strcmp(buf[mid].id, ID) < 0){low = mid+1;}else {high = mid-1;}}// 二分查找结束if (low > high)//查找失败printf("No Answer!\n");}//while:查找sort(buf, buf+n); // 输入的内容不一定有序,我们要排序}//while :多组测试return 0;}


0 0
原创粉丝点击