問題 A: 找x
時間限制: 1 Sec 內存限制: 32 MB
題目描述
輸入一個數n,然後輸入n個數值各不相同,再輸入一個值x,輸出這個值在這個數組中的下標(從0開始,若不在數組中則輸出-1)。
輸入
測試數據有多組,輸入n(1<=n<=200),接着輸入n個數,然後輸入x。
輸出
對於每組輸入,請輸出結果。
樣例輸入
4
1 2 3 4
3
樣例輸出
2
實在找不到此題跟二分有什麼關係。。。
代碼:
#include<iostream>
using namespace std;
int main(){
int n,x;
int a[210];
while(cin>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>x;
bool not_input=true;
for(int i=0;i<n;i++){
if(a[i]==x){
cout<<i<<endl;
not_input=false;
break;
}
}
if(not_input) cout<<"-1\n";
}
return 0;
}
問題 B: 打印極值點下標
時間限制: 1 Sec 內存限制: 32 MB
題目描述
在一個整數數組上,對於下標爲i的整數,如果它大於所有它相鄰的整數,或者小於所有它相鄰的整數,則稱爲該整數爲一個極值點,極值點的下標就是i。
輸入
每個案例的輸入如下:
有2×n+1行輸入:第一行是要處理的數組的個數n;
對其餘2×n行,第一行是此數組的元素個數k(4<k<80),第二行是k個整數,每兩個整數之間用空格分隔。
輸出
每個案例輸出不多於n行:每行對應於相應數組的所有極值點下標值,下標值之間用空格分隔,如果沒有極值點則不輸出任何東西。
樣例輸入
2 4 1 2 1 3 5 3 4 5 6 7
樣例輸出
0 1 2 3 0 4
本題難點:格式,
1.不能(a[i]-a[i-1])*(a[i]-a[i+a])>0相乘可能溢出
2.格式 千萬注意 開頭結尾不能有多餘的空格
結尾有換行 若前面沒有輸出,結尾無需換行
代碼:
#include<iostream>
using namespace std;
int main(){
int n,m,a[90];
while(cin>>n){
while(n--){
cin>>m;
for(int i=0;i<m;i++){
cin>>a[i];
}
bool Isinput=false;
if(a[0]!=a[1]){
cout<<0;//第一次輸出
Isinput=true;//萬一第一個不是極值點 格式又錯了
}
for(int i=1;i<m-1;i++){
//整數可能很大,相乘溢出
//if((a[i]-a[i-1])*(a[i]-a[i+1])>0){
if(a[i]>a[i-1]&&a[i]>a[i+1]||a[i]<a[i-1]&&a[i]<a[i+1]){
if(Isinput){
cout<<" "<<i;//之前至少有過一次輸出 才能 ” i“
}else{
Isinput=true;
cout<<i;//第一次輸出
}
}
}
if(a[m-1]!=a[m-2]) cout<<" "<<m-1<<endl;
else if(Isinput) cout<<endl;
}
}
return 0;
}
問題 C: 查找
時間限制: 1 Sec 內存限制: 32 MB
提交: 840 解決: 385
[提交][狀態][討論版][命題人:外部導入]
題目描述
輸入數組長度 n
輸入數組 a[1...n]
輸入查找個數m
輸入查找數字b[1...m]
輸出 YES or NO 查找有則YES 否則NO 。
輸入
輸入有多組數據。
每組輸入n,然後輸入n個整數,再輸入m,然後再輸入m個整數(1<=m<=n<=100)。
輸出
如果在n個數組中輸出YES否則輸出NO。
樣例輸入
6
3 2 5 4 7 8
2
3 6
樣例輸出
YES
NO
爲了和二分扯上關係,硬是排了一下序,時間不知多還是少了
代碼:
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a[110],b[110];
bool findB(int x){
int left=1,right=n;//下標1~n可不能弄混了
int mid;
while(left<=right){
mid=(left+right)/2;
if(a[mid]==x) return true;
else if(a[mid]>x) right=mid-1;
else left=mid+1;
}
return false;
}
int main(){
while(cin>>n){
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>b[i];
}
sort(a+1,a+1+n);
//"YES"和“NO"要按順序輸出 不能動數組b(不能排序)
for(int i=1;i<=m;i++){
if(findB(b[i])){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}
return 0;
}