今年的笔试试题有点坑爹啊(记13年企鹅开发试题)!!
今年的企鹅程序开发的题目有点坑爹,没有算法编程,坑得俺各种惨啊!一直对自己的编程能力不是很自信,所以在开学之初就一直狂撸算法、POJ上的题目。结果今年……嘛都不说了,都是泪啊!!更坑爹的是今年的题目就只有选择、填空两大题目类型(不加附加题),选择题却出人意料的变成了不定项选择题!
2.有如下定义:
int i;
char a[10];
string f();
string g(string &str);
则下列语句中,不会产生编译错误的是()
A.if ( !! i){f();} B.g(f()) C.a = a + 1 D.g("abc")
C、D两项毫无疑问的排除了,对于B项,一直很不确定,所以最后果断给补上的!!现在看来是悲剧了!因为在f()返回string对象后,是生产的一个临时对象,将这个临时对象作为g()的参数传递,然而g中的形参是作为引用声明的,而引用是不能对一个临时变量进行引用的!!
14.在有n个整数的序列中找出最大值和最小值,最少需要的比较次数是()
A. 2n - 2 B. 3n/2 C. n - 1 D. 4n/3
其实,我是没理解这个题目的意思,对于这个题目我自己的理解是求最少的比较次数,而最小的比较次数就是该组数为有序的。所以其比较次数为n - 1;但听同学说是编程之美的一题目,答案为3n/2;这是又悲剧了么??
个人的算法如下:
#include <iostream> #include <cmath> using namespace std; void findMaxMin(int arr[],int length,int &min,int &max ) { min = arr[0]; max = arr[0]; int i; int cnt = 0; //当前值若小于min,则一定会小于max,就不用再与max比较了。 for (i = 1; i < length; i++) { if ( cnt++ && min > arr[i]) { min = arr[i]; } else if ( cnt++ && max < arr[i] ) { max = arr[i]; } } cout << "cnt = " << cnt << endl; } int main() { int arr[] = { 10,9,8,7,6,5,4,3,2,1 }; int len; len = sizeof(arr) / sizeof(arr[0]); int max,min; findMaxMin(arr,len,min,max); cout << "min = " << min << endl; cout << "max = " << max << endl; return 0; }
其运行结果为:
posted on 2013-04-13 15:33 wickedboy237 阅读(280) 评论(0) 编辑 收藏 举报