有 n(n \le 2 \times 10^6)n(n≤2×10
6
) 名同学陆陆续续进入教室。我们知道每名同学的学号(在 11 到 10^910
9
之间),按进教室的顺序给出。上课了,Teacher想知道第 ii 个进入教室的同学的学号是什么(最先进入教室的同学 i=1i=1),询问次数不超过 10^510
5
次。
输入格式
第一行 22 个整数 nn 和 mm,表示学生个数和询问次数。
第二行 nn 个整数,表示按顺序进入教室的学号。
第三行 mm 个整数,表示询问第几个进入教室的同学。
输出格式
输出 mm 个整数表示答案,用换行隔开。
输入输出样例
输入 #1复制
10 3
1 9 2 60 8 17 11 4 5 14
1 5 9
输出 #1复制
1
8
5
#include
int main()
{
int n,m;
int a;
scanf("%d %d",&n,&m);
double b[n];
while(n--){
scanf("%lf",&b[n]);
}
while(m--){scanf("%d",a);
printf(m!=0?"%.0lf\n":"%.0lf",b[n-a+1]);
}
return 0;
}
题主的代码修改如下,供参考:
#include<stdio.h>
int main()
{
int n, m, b[100000], a, i;
scanf("%d %d", &n, &m);
i = n;
while (i--) { //n 需要保持不变,后面还要用到
scanf("%d", &b[i]);
}
while (m--) {
scanf("%d", &a); //scanf("%d",a); a 前面缺了 ‘&’ 符
printf(m != 0 ? "%d\n" : "%d", b[n - a]); //修改
}
return 0;
}
老老实实地按常规的来不行吗?又不是很熟练,搞那么花里胡哨的
#include<stdio.h>
int main()
{
int n,m;
int a;
scanf("%d %d",&n,&m);
int b[n], ask[m];
for(int i=0; i<n; i++)
{
scanf("%d", &b[i]);
}
for(int i=0; i<m; i++)
{
scanf("%d",&ask[i]);
}
for(int i=0; i<m; i++)
{
printf("%d\n", b[ask[i]-1]);
}
return 0;
}