复试上机题集(2)

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88834209
  1. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    程序分析:
    假设该数为 x。
    1、则:x + 100 = n2, x + 100 + 168 = m2
    2、计算等式:m2 - n2 = (m + n)(m - n) = 168
    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
    4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
    5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
    6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
    7、接下来将 i 的所有数字循环计算即可。
#include "stdio.h"
void main(){
	int i,j,m,n,x;
	for(i=1;i<168/2+1;i++){
		if(168%i==0){
			j=168/i;
			if(i>j&&(i+j)%2==0&&(i-j)%2==0){
				m=(i+j)/2;
				n=(i-j)/2;
				x=n*n-100;
				printf("%d+100=%d*%d\n",x,n,n);
				printf("%d+268=%d*%d\n",x,m,m);
			}
		}
	}
}
  1. 输入某年某月某日,判断这一天是这一年的第几天?
#include "stdio.h"

void main(){
	int year=2015,month=10,day=1,flag=0,sum=0,i;
	int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if((year%4==0&&year%100!=0)||year%400==0){
		flag=1;
	}
//	scanf("%d,%d,%d",&year,&month,&day);
	for(i=0;i<month-1;i++){
		sum=sum+m[i];
	}
	printf("%d\n",sum);
	if(month>2)	sum=sum+flag;
	printf("%d",sum+day);
}
  1. 古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,
    小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
    写出几个月之后找规律
#include "stdio.h"
void main(){
	int a[40];
	a[0]=1;
	a[1]=1;
	int i;
	for(i=2;i<40;i++){
		a[i]=a[i-1]+a[i-2];
	}
	for(i=0;i<40;i++)
	printf("%d\n",a[i]);
}
  1. 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#include "stdio.h"
#include "math.h"
void main(){
	int n=90;
//	scanf("%d",&n);
	int temp=n;
	int a[n],b[n];
	int i,k=0,j,flag;
	for(i=2;i<=n;i++){
		flag=1;
		for(j=2;j<=sqrt(i);j++){
			if(i%j==0)	flag=0;
		}
		if(flag) a[k++]=i;
	}
	i=0;
	while(temp!=1){
		for(j=0;j<k;j++){
			if(temp%a[j]==0)break;
		}
		b[i++]=a[j];
		temp=temp/a[j];
	}
	
	for(j=0;j<i;j++)
		printf("%d ",b[j]);
}
  1. 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
#include "stdio.h"
#include "math.h"
void main(){
	int a=2,n=5;
	int i,j,sum=0,temp,num;
//	scanf("%d",&n);
	for(i=1;i<=n;i++){
		num=0;
		for(j=1;j<=i;j++){
			temp=a*pow(10,j-1);
			num=num+temp;
		}
		printf("%d\n",num);
		sum=sum+num;
	}
	printf("%d",sum);
}
  1. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
    这里的因子,指的是所有的因子比如:28=1+2+4+7+14
#include "stdio.h"
void main(){
	int i,j,k,sum;
//	int a[1000];
	for(i=2;i<=1000;i++){
		sum=0;
		int a[1000]={0};
//		memset(a,0,sizeof(a));
		k=0;
		a[k++]=1;
		for(j=2;j<=i/2;j++){
			if(i%j==0)	a[k++]=j;
		}
		for(j=0;j<k;j++){
			sum=sum+a[j];
		}
		if(sum==i){
			printf("%d ",i);
			for(j=0;j<k;j++)	printf("%d ",a[j]);
			printf("\n");
		}
	} 
}

猜你喜欢

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