电子科大研究生复试c语言

电子科大c语言复试题(一)

一、完美乘法,a×b=c,abc中只出现0~9的数字,且每个数字在这个等式中都出现一遍。
算法思路:0123456789这十个数字都出现一遍,大概估计100×10000=1000000出现的数字已经超出了10个。故可以采用两个for循环,列举这些数据,并用一个数组f[10]统计乘式中10个数字出现个数并作出相应判断,如果0–9之间都只出现一次则数组f[10]各个元素均为1则满足条件,否则不满足。
代码如下:

c语言代码如下,如有其他更好的思路欢迎讨论
#include <stdio.h>

int main(void)
{
   int k,x,count = 0;
   int f[10],s[3];
   int key,y,t;

   for(int i=1; i<99; i++)
   {
   	for(int j=100; j<9999; j++)
   	{
   	   key = 0;       //统计数组中不为1元素个数 
       for(x=0; x<10; x++)   //数组清零测试为下一个数做准备 
         f[x]=0;
       
	   k = i*j;
	   s[0] = i;
	   s[1] = j; 
	   s[2] = k;
	   //统计乘式中0--9数字出现的次数并存于数组f中 
	   for(x=0; x<3; x++)
	   {
	    	y = s[x];
	    	while(y>0)
	   	   {
	   	     t = y%10;
		     f[t]++;
		     y = y/10;	
		   }
	   }
	   //统计数组中不为1元素个数 
	   for(x=0; x<10; x++)
	   {
	   	if(f[x]!=1) key++;
	   }
	     
	   if(key==0) 
	   {
	   	count++;
	   	printf("%d * %d = %d\n", i, j, k);//打印输出乘式 
	   }	    
	     
	}
   	
   }
    printf("%d", count); 
	return 0;
}

二、4.如果有两个数,每一个数它的所有约数(除了它本身之外)的和正好等于对方,则称这两个数为互满数,求出N以内所有的互满数,并输出显示。求互满数函数原型
(int factor(int j))
算法思路:定义函数int factor(int j) 利用他来求出j的所有约数之和(本身除外),然后for循环并通过factor求出N以内所有约数之和再判断是否为互满数。
代码如下:

c语言算法如下,如有其他意见欢迎讨论
#include <stdio.h>
#define N 30000//宏定义求取互满数范围
int factor(int j); //求一个数的约数之和

int main(void)
{  
    int i, sum;
    for(i=2; i<N; i++)
    {
    	sum = factor(i);
    	//sum>i为了去除互满数重复如A是B互满数B也是A,以及本身重复如6是6的互满数
    	if(sum>i && factor(sum)==i)
    	   printf("%d and %d is HMS\n", i, sum);	
	} 
   return 0;
}

int factor(int j)
{
	int i, n=0;
	for(i = 1; i<j; i++){
		if(j%i == 0)
		  n = n+i;
	}	
	return n;
}

今天有点懒了,更两道算法题,明天继续。如有错误欢迎联系本人,及时改正。

发布了9 篇原创文章 · 获赞 22 · 访问量 2830

猜你喜欢

转载自blog.csdn.net/baobaobao0000/article/details/104850428
今日推荐