c 高級面試題目

1、有一分數序列:1/2,1/4,1/6,1/8„„,用函式調用的方法,求此數列前 20 項的和
#include <stdio.h>
double getvalue()
{
double result = 0;
int i = 2;
while(i < 42)
{
result += 1.0 / i;//一定要使用 1.0 做除數,不能用 1,否則結果將自動轉化成整數,即 0.000000
i += 2;
}
return result;
}
int main()
{
printf("result is %f\n", getvalue());
system("pause");
return 0;
}
2、有一個數組 a[1000]存放 0--1000;要求每隔二個數刪掉一個數,到末尾時循環至開頭繼續進行,求最後一個被刪掉的數的原始下標位置。
以 7 個數為例:
{0,1,2,3,4,5,6,7} 0-->1-->2(刪除)-->3-->4-->5(刪除)-->6-->7-->0(刪除),如此循環直到最後一個數被刪除。
方法 1:數組
#include <iostream>
using namespace std;
#define null 1000
int main()
{
int arr[1000];
for (int i=0;i<1000;++i)
arr[i]=i;
int j=0;
int count=0;
while(count<999)
{
while(arr[j%1000]==null)
j=(++j)%1000;
j=(++j)%1000;
while(arr[j%1000]==null)
j=(++j)%1000;
j=(++j)%1000;
while(arr[j%1000]==null)
j=(++j)%1000;
arr[j]=null;
++count;
}
while(arr[j]==null)
j=(++j)%1000;
cout<<j<<endl;
return 0;
}方法 2:鍊表
#include<iostream>
using namespace std;
#define null 0
struct node
{
int data;
node* next;
};
int main()
{
node* head=new node;
head->data=0;
head->next=null;
node* p=head;
for(int i=1;i<1000;i++)
{
node* tmp=new node;
tmp->data=i;
tmp->next=null;
head->next=tmp;
head=head->next;
}
head->next=p;
while(p!=p->next)
{
p->next->next=p->next->next->next;
p=p->next->next;
}
cout<<p->data;
return 0;
}
方法 3:通用算法
#include <stdio.h>
#define maxline 1000 //元素個數
/*
maxline 元素個數
a[] 元素數組
r[] 指針場
suffix 下標
index 返回最後的下標序號
values 返回最後的下標對應的值
start 從第幾個開始
k 間隔
*/
int find_n(int a[],int r[],int k,int& index,int& values,int s=0) {
int suffix;
int front_node,current_node;
suffix=0;
if(s==0) {
current_node=0;
front_node=maxline-1;
}
else {
current_node=s;
front_node=s-1;
}
while(r[front_node]!=front_node) {
printf("%d\n",a[current_node]);
r[front_node]=r[current_node];
if(k==1) {
current_node=r[front_node];
continue;
}
for(int i=0;i<k;i++){
front_node=r[front_node];
}
current_node=r[front_node];
}
index=front_node;
values=a[front_node];
return 0;
}
int main(void) {
int a[maxline],r[maxline],suffix,index,values,start,i,k;
suffix=index=values=start=0;
k=2;
for(i=0;i<maxline;i++) {
a[i]=i;
r[i]=i+1;
}
r[i-1]=0;
find_n(a,r,k,index,values,2);
printf("the value is %d,%d\n",index,values);
return 0;
}