对于一些题目,常常会碰到这样一种情况:给定一些元素,然后查找某个满足条件的元素。如果范围较小,直接遍历即可,本篇笔记就是使用这种方法。如果范围较大,则使用后面说到的二分查找。
例如,输入一个数字你,然后输入n个不同的数字,再输入一个数值x,输出这个x的下标,如不存在,则输出-1.
#include<cstdio>
const int maxn =210;
int a[maxn];
int main(){
int k,n,x;
while(scanf("%d",&n)!=EOF){
for(int i =0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&x);
for(k=0;k<n;k++){
if(a[k] == x){
printf("%d\n",k);
break;
}
}
if(k==n){
printf("-1\n");
}
}
return 0;
}
下面我们从一个具体题目中运用这个方法。
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,k,a,b,d,t=0,h=1;
long long num;
int j[20];
for(i=5;i<40;i++){
a = i*i*i;
b = a * i;
if(a>999 && a<10000 && b>99999 && b<1000000)
{
num = a*1000000+b;
for(d=0;d<10;d++)
{
while(num>0)
{
j[d]= num%10;
num = num/10;
d++;
}
}
for(k=0;k<10;k++){
for(d=0;d<10;d++){
if (j[d] == k) t++;
}
}
if(t == 10) cout<<i;
}
}
return 0;
}