算法的优化

来源:互联网 发布:网络专供电器 编辑:程序博客网 时间:2024/05/29 16:24

    今天做了一道题,因为没想到简洁的方法,然后我写的程序很复杂,实现的功能却很简单,其实只需要一个简单的步骤就可以带过,实现相同的功能。

例题:

        编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12

思路:在解决完全平方数的时候,我想到的方法是对1000--10000进行遍历,让其除以30到100的数,若两个数相等,则求出完全平方数。  其实换一个思路会很简单,对1000--10000每个数进行开平方,再让结果乘方,这样便得到了一个完全平方数。

解决方法1:

/**********************************************************File Name:         Author:              xxx      Date:2016-11-27Description: 编写一个程序,求出满足下列条件的四位数:该数是  个完全平方数,且第一、三位数字之和为10,第二、  四位数字之积为12Fuction List:************************************************************/#include<stdio.h>#define N 100int main(){int i;int a[N] = {0};int j;int k = 0;for (i = 1000; i < 10000; i++){for (j = 30; j < 100; j++){if (j * j == i){a[k] = i;k++;}}} /*for (i = 0; i <len; i++ ){printf("%d\n",a[i]);}*/int num_1;int num_2;int num_3;int num_4;int temp1;int temp2;for (i = 0; i < N; i++){num_4 = a[i] % 10;//printf("%d\n",num_1);num_3 = a[i] / 10 %10;num_2 = a[i] / 100 % 10;num_1 = a[i] /1000;//printf("%d\n",a[i]);temp1 = num_1 + num_3;temp2 = num_2 * num_4;//printf("num_1 + num_3=%d\n",temp1);//printf("num_2 * num_4=%d\n",temp2);if ((temp1 == 10) && (temp2 ==12)){printf ("%d\n", a[i]);}}return 0;}
解决方法2:

/**********************************************************File Name:         Author:                 xxx      Date:2016-11-27Description: 编写一个程序,求出满足下列条件的四位数:该数是  个完全平方数,且第一、三位数字之和为10,第二、  四位数字之积为12Fuction List:************************************************************/#include<stdio.h>#include<math.h>int main(){int i;int j;int num_1;int num_2;int num_3;int num_4;for (i = 1000; i < 10000; i++){num_4 = i % 10;num_3 = i / 10 %10;num_2 = i / 100 % 10;num_1 = i /1000;j = sqrt(i);if ((j * j == i) && (num_1 + num_3 == 10) && (num_2 * num_4 ==12)){printf ("%d\n", i);}}return 0;}

从程序长短来看,就能很快发现第一种思路太过于冗长,而第二种很简单。

1 0
原创粉丝点击