复试上机题集(4)

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88870044
  1. 海滩上有一堆桃子,五只猴子来分。
    第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。
    第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,
    第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
#include "stdio.h"
void main(){
	int sum;
	int i,j;
	for(i=1;i>0;i++){
		sum=i*5+1;
		for(j=5;j>1;j--){
			if(sum%4==0){
				sum=sum/4*5+1;
			}
			else break;
		}
		if(j==1){
			printf("%d-->%d",j,sum); 
			break;
		}
	}
}
  1. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
    借助个数组轻松实现
# include "stdio.h"
#define len 5
void main(){
	int a[len]={1,2,3,4,5};
	int b[len];
	int m=3,i,j;
	for(i=0;i<len;i++){
		j=(i+m)%len;
		b[j]=a[i];
	}
	for(i=0;i<len;i++){
		printf("%d ",b[i]);
	}
	
}
  1. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
# include "stdio.h"
#define len 13
typedef struct {
	int data;
	int next;
} circle;
void main() {
	circle a[100];
	int num=1,j=13,i;
	for(i=1; i<=len; i++) {
		a[i].data=i;
		if(i==len) a[i].next=1;
		else a[i].next=i+1;
	}

	while(num<len) {
		i=0;
		while(i<3) {
			j=a[j].next;
			if(a[j].data) {
				i++;
			}
		}
		printf("%d ",a[j].data);
		a[j].data=0;
		num++;
	}
	
	for(i=1; i<=len; i++) {
		if(a[i].data)	printf("\n%d",a[i].data);
	}
}

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88870044