本博文源于《算法竞赛入门经典(第二版)》,旨在解决大理石在哪儿(Where is the Marble? Uva10474)这道题目,渐渐走入题库训练。博文目录有:1.问题再现2.样例输入&样例输出3.题目分析4. 代码测试效果5.代码讲解及完整源码
- 1.问题再现
- 2.样例输入&样例输出
- 3.题目分析
- 4. 代码测试效果
- 5.代码讲解及完整源码
现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回答Q个问题。每个问题是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石写着x。排序后的大理石从左到右编写为1-N。(样例中,所有大理石上的数合并到一行,所有问题也合并到一行)
2.样例输入&样例输出4 1 2 3 5 1 5 5 2 1 3 3 3 1 2 3
样例输出
CASE# 1: 5 found at 4 CASE# 2: 2 not found 3 found at 33.题目分析
- 题目上说“首先把各数从小到大排序” ,也就是你要先排序
- “每个问题是否有一个大理石写着某个整数x”这句话的意思就是要去查找这个数字
- 如果是,还要回答哪个大理石写着x 这句话的意思是,排序好后,然后进行查找,查找完,如果找到那就返回这个值的下标
例如 输入 4 1也就是输入四个数字 去问1个问题
2 3 5 1
5
输入2 3 5 1这四个数字,问5在这个石头里吗?
先排序
1 2 3 5
结果发现5在第四个,那就是说5找到了,在第四个,输出就是样例输出.
#include#include using namespace std; const int maxn = 10000; int main() { int n,q,x,a[maxn],kase = 0;//n:输入的数组个数 q:问题个数 x:要查找的值,maxn:数组的全部容量,kase:样例计数 while(scanf("%d%d",&n,&q) == 2 && n){ //输入 printf("CASE# %d:n",++kase); //样例加1 for(int i=0;i



