1.求中位數的位置
先輸入一個整形數字N,接着輸入N個無序的數字。要求輸出升序排列後的中位數,以及該中位數輸入的次序。如果N爲偶數,則輸出有二箇中位數,如果N爲奇數,輸出最中間的數即可。
樣例1:
輸入:5
9 2 7 1 6
輸出:6 5
樣例2:
輸入:6
9 6 7 1 2 3
輸出:3 6
6 2
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int max(int x,int y){
return x>y?x:y;
}
struct number{
int value;
int index;
bool operator <(number b){
return value<b.value;
}
};
int main(int argc, char* argv[])
{
int n,odd;
number num[100];
cin>>n;
for(int i=0;i<n;i++){
cin>>num[i].value;
num[i].index=i;
}
sort(num,num+n);
if(n&1==1) cout<<num[n/2].value<<" "<<num[n/2].index+1;
else cout<<num[n/2-1].value<<" "<<num[n/2-1].index+1<<endl
<<num[n/2].value<<" "<<num[n/2].index+1;
return 0;
}
2.查找未定義變量
輸入兩個C語言語句,第一句爲正常的C語言變量定義語句,符合C語言語法要求,變量間可以有多個空格,包含數組,指針定義等。第二句爲變量運算語句,要求輸出第二個C語言語句中未定義的變量。
樣例:
輸入: int x12, y=1, num_stu=89, a[30], *p;
Sum=num+x12*y;
輸出:
Sum num
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int max(int x,int y){
return x>y?x:y;
}
int nextvar(string str,int &curindex,string &nextstr){
if(curindex>=str.size()-1) return 0;
int startindex,endindex;
int delindex;
while(str[curindex]=='*'||str[curindex]==' ') curindex++; //è¥3y±?á????°?àóàμ?????oí*
startindex=curindex;
endindex=str.find(",",startindex);
if(endindex==string::npos) endindex=str.find(";",startindex);
curindex=endindex+1;
if(!(endindex>startindex)) return 0;
nextstr=str.substr(startindex,endindex-startindex);
delindex=nextstr.find("[");
if(delindex!=string::npos){
nextstr.erase(delindex,nextstr.size());
}
delindex=nextstr.find("=");
if(delindex!=string::npos){
nextstr.erase(delindex,nextstr.size());
}
if(!nextstr.empty()) return 1;
else return 0;
}
int nextvar2(string str,int &curindex,string &nextstr){
if(curindex>=str.size()-1) return 0;
int startindex,endindex;
while(str[curindex]=='*'||str[curindex]==' ') curindex++; //è¥3y±?á????°?àóàμ?????oí*
startindex=curindex;
for(int i=startindex;i<str.size();i++){
if(!( ((str[i]>='a')&&(str[i]<='z'))
||((str[i]>='A')&&(str[i]<='Z'))
||((str[i]>='0')&&(str[i]<='9'))
||(str[i]=='_')))
break;
}
endindex=i;
curindex=endindex;
if(str[curindex]=='[') {
curindex++;
while(str[curindex]!=']') curindex++;
}
if(str[curindex]==']') curindex++;
curindex++;
while((str[curindex]>='0')&&(str[curindex]<='9')) curindex++;
//cout<<curindex<<" "<<str[curindex]<<endl;
if(!(endindex>startindex)) return 0;
nextstr=str.substr(startindex,endindex-startindex);
if(!nextstr.empty()) return 1;
else return 0;
}
int main(int argc, char* argv[])
{
string str1,str2,nextstr;
char s[100];
vector<string> var;
gets(s);
str1=s;
gets(s);
str2=s;
int length=str1.size();
int curindex=0;
while(str1[curindex]==' '){
str1.erase(curindex,curindex+1);
}
curindex=str1.find(" ");
while(nextvar(str1,curindex,nextstr)){
var.push_back(nextstr);
}
curindex=0;
while(str2[curindex]==' '){
str2.erase(curindex,curindex+1);
}
while(nextvar2(str2,curindex,nextstr)){
int result=0;
for(int i=0;i<var.size();i++){
if(var[i]==nextstr) {
result=1;
break;
}
}
if (result==0) cout<<nextstr<<" ";
}
//for(vector<string>::iterator iter=var.begin();iter!=var.end();iter++)
// cout<<*iter<<endl;
return 0;
}
3.找家譜成員
輸入若干行,每一行的第一個輸入爲家譜中的某成員,該行接着輸入的信息爲每個孩子姓名。最後一行的輸入爲要求查找的兩個家譜成員的關係。要求:根據輸入的家譜成員信息,建立二叉樹家譜關係圖,並輸出二位待查找成員在家譜中的關係,包括輸出他們最鄰近的共同祖先以及在家譜中相差的層次數。
樣例:
輸入:
YE SHU MEI
SHU GE MEI1
BA SELF MEI2
GE SON1 SON2
SON2 MEI1
輸出:
SHU 1
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int max(int x,int y){
return x>y?x:y;
}
struct treeNode{
treeNode *parent;
char lchild[20];
char rchild[20];
char name[20];
int depth;
treeNode(){
depth=0;
parent=NULL;
}
};
treeNode node[100];
int main(int argc, char* argv[])
{
char line[100];
char nametmp[3][20];
int spaceindex,curstart=0;
int n=0,curcount=0,c=0;
int nodeindex=0;
bool readend=false,find=0,find1=0,find2=0;
while(gets(line)){
for(int i=0;i<strlen(line);i++){
if (line[i]==' '){
spaceindex=i;
strncpy(nametmp[curcount],line+curstart,spaceindex-curstart);
nametmp[curcount][spaceindex-curstart]=0;
//cout<<nametmp[curcount];
curcount++;
curstart=spaceindex+1;
}
if (i==strlen(line)-1){
spaceindex=i+1;
strncpy(nametmp[curcount],line+curstart,spaceindex-curstart);
nametmp[curcount][spaceindex-curstart]=0;
//cout<<nametmp[curcount];
curcount++;
if(curcount==2) readend=true;
}
if(curcount==3) {
spaceindex=0;
curstart=0;
curcount=0;
find=0;
find1=0;
find2=0;
for(int j=0;j<n;j++){
if(strcmp(node[j].name,nametmp[0])==0){
find=1;
c=j;
}
if(strcmp(node[j].name,nametmp[1])==0){
find1=1;
}
if(strcmp(node[j].name,nametmp[2])==0){
find2=1;
}
}
if(find==0){
n++;
c=n;
}
strcpy(node[c].name,nametmp[0]);
strcpy(node[c].lchild,nametmp[1]);
strcpy(node[c].rchild,nametmp[2]);
cout<<c<<":"<<node[c].name<<" "<<node[c].lchild<<" "<<node[c].rchild<<endl;
if(find1==0){
n++;
c=n;
strcpy(node[c].name,nametmp[1]);
cout<<c<<":"<<node[c].name<<endl;
}
if(find2==0){
n++;
c=n;
strcpy(node[c].name,nametmp[2]);
cout<<c<<":"<<node[c].name<<endl;
}
}
if(readend==true) break;
}
if(readend==true) {
for(i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(strcmp(node[i].lchild,node[j].name)==0){
node[j].parent=&node[i];
node[j].depth=node[i].depth+1;
}
if(strcmp(node[i].rchild,node[j].name)==0){
node[j].parent=&node[i];
node[j].depth=node[i].depth+1;
}
}
}
int dep1=0,dep2=0;
treeNode *p1,*p2;
for(i=1;i<=n;i++){
if(strcmp(node[i].name,nametmp[0])==0){
dep1=node[i].depth;
p1=&node[i];
cout<<"p1:"<<p1->name<<endl;
}
if(strcmp(node[i].name,nametmp[1])==0){
dep2=node[i].depth;
p2=&node[i];
cout<<"p2:"<<p2->name<<endl;
}
}
cout<<"depth="<<dep1-dep2<<endl;
while(p1!=p2){
if(p1->depth>p2->depth)
{
p1=p1->parent;
cout<<"p1:"<<p1->name<<endl;
continue;
}
if(p1->depth<p2->depth)
{
p1=p1->parent;
cout<<"p2:"<<p2->name<<endl;
continue;
}
if(p1->depth==p2->depth&&p1!=p2)
{
p1=p1->parent;
p2=p2->parent;
cout<<"p1:"<<p1->name<<endl;
cout<<"p2:"<<p2->name<<endl;
}
}
cout<<"parent:"<<p1->name<<endl;
break;
}
}
return 0;
}