算法思想
1. 算法思想
如果 x 和 y 是被随机抽掉的那两个元素,那么:
x + y = sum
x * y = proct
(sum 和 proct 的值都可以在程序中不违反条件的情况下求出)
解方程组:
x + proct / x = sum
x^2 - sum * x + proct = 0
用公式解决一元二次方程:
x = ( sum + √(sum^2 - 4 * proct) ) / 2
y = sum - x
问题中没有提及编程语言的限制。我假设 java 是被允许的:
import java.util.*;
import java.math.*;
class C {
public static void main(String[] args) {
final int MAX = 10000;
// 把 ArrayList 当数组用(比较方便且没违反问题的限制)
List<Integer> problemArray = new ArrayList<Integer>();
for (int i = 1; i <= MAX; i++)
problemArray.add(i);
// 打乱,然后抽去前两个(等于打乱前随机抽去两个)
Collections.shuffle(problemArray);
System.out.println("随机抽去的两个数是 " + problemArray.remove(0) +
" 和 " + problemArray.remove(0));
/*
* 五个变量的限制现在开始(MAX 是常量所以不算)
*/
int sum = 0;
BigInteger proct = BigInteger.ONE;// 10000 的阶乘远远超出 int 的范围
// 计算 1 到 MAX 的和与积
for (int i = 1; i <= MAX; sum += i++)
proct = proct.multiply(BigInteger.valueOf(i));
// 遍历问题数组一遍(计算被抽去的两个数的和与积)
for (int i = 0; i < MAX - 2; sum -= problemArray.get(i++))
proct = proct.divide(BigInteger.valueOf(problemArray.get(i)));
// 一元二次方程用公式解决
int x = (sum + (int) Math.sqrt(sum * sum - 4 * proct.intValue())) / 2;
System.out.println("计算结果:被抽去的两个数是 " + x + " 和 " + (sum - x));
}
}
2. DDA算法的算法思想
直线的基本微分方程为: 。
设直线通过点 和 ,则直线方程可表示为: 。
如果已知第 点的坐标,可用步长 和 得到第 点的坐标为:
或
如下图:
将算得的直线上每个点的当前坐标,按四舍五入得到光栅点的位置。
3. 动态规划算法的基本思想是什么
DP一定有状态,而贪心只是说这个题目最有满足什么条件就能得到最优解的情况
一般DP必须得求出他的状态和转移方程
4. 统计算法的思想是什么
比如说统计字符个数吗?
算法是基于基本逻辑的,统计学不是仅仅像其表面的文字表示,只是统计数字,而是包含了调查、收集、分析、预测等,应用的范围十分广泛。
用于统计的算法的思想当然是统计学啊,一直++,也算。
要不你举个具体例子来分析思想。
5. 算法思想是什么
算法的思想是解决问题
6. 算法是编程思想吗
算法+代码=程序,算法是程序设计的灵魂,也就是你所说的编程思想
7. 散列算法的算法思想
我也只能说说思想
散列算法的算法就是争取一个萝卜一个坑的原则
比如说有5个数 12,25,30,45,50,这几个数有个规律,就是十位数都不相同,
如果我设置一个散列函数f(value)=value/10;平常的时候,我们查找50,要比较
5次(其他算法可能不同),这里用散列算法只需要1次,就是解散列函数,key=50/10
=5,要找的数就在第5个位子.但是上面问题还是很多的,比如说查找55呢?就会出
错<因为55解散列函数之后,也是在第5个位子>,还有等等等问题,很显然这个是我
散列函数没设置好,当你把散列函数设置好了后,由于数据的庞大,冲突很有可能
产生,那么就需要我们来处理冲突了,所以写散列算法就是设置好的散列函数和
处理冲突的过程.这里散列算法涉及的查找就跟查找的数量无关,跟冲突率有直接
的关系
8. 什么是算法构造算法的基本思想是什么
1顺序结构
按从上到下的顺序进行
2选择结构
根据条件作判断,再决定执行哪一种操作的算法结构
必须包含判断框
3循环结构
9. 选择排序算法的思想是什么
选择排序=选择最小放前面