导航:首页 > 源码编译 > 算法问题

算法问题

发布时间:2022-01-23 05:51:00

A. 有关算法的问题

您好,您问答这个问题很好,很有意义。
您的这个问题与电脑的计算过程有关,和编程语言也有关。A与C,是两个大数,B相对来说就很小。按您的计算结果,情况应该是这样:编程语言编译时是从左到右对计算进行编译(部分编译器会反方向进行),此时,A和C会被识别为浮点型,B识别为整型(不知道您是什么编译器,什么语言,这里假设是弱类型的语言),那么运算时,A先与B运算,就是一个浮点型与一个整型运算,自动类型转换会转换C为浮点型(在运算中,较低“等级”的类型与较高“等级”的类型运算时,会自动类型转换),此时相当于一个大数与一个接近0的数相加,根据IEEE标准,浮点数是由符号位S、阶码E和尾数M组成,其中能够决定精度的尾数M在单精度浮点数里面,仅有23位,那么在A与B相加后,可以“认为”A+B=A,因为这个“小数”1,在产生的结果中“不存在”,因为这个A的尾数的最低一位表示的值都比1大。
这样,A+B+C就是0,而先算浮点数的算法却不同,因为A+C算完了,其结果大约是绝对值小于1e-6的一个数(也就是说,对于浮点数,不存在真正意义上的0的说法,浮点数里面,认为小于1e-6的数,就是0),此时在与1相加,提升为浮点型后,这个小于1e-6的尾数在新的浮点数里面也就“不存在”了,与上边所说的A+B“相当于”没加是一个道理。

您问的这个问题,是编程与科学计算中一个基本问题,就是计算方法里面的精度问题。在用计算机处理数据时,此类问题处理不好,会对计算结果产生关键影响。更详细的细节建议网络相关内容进行学习。
参考:http://ke..com/link?url=-eAbFbjw_t_HG9vjrxEN5q

B. 有关算法问题

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将个子问题的解合并得到原问题的解。
分治法的基本步骤:
divide-and-conquer(P)
{
if ( | P | <= n0) adhoc(P); //解决小规模的问题
divide P into smaller subinstances P1,P2,...,Pk;//分解问题
for (i=1,i<=k,i++)
yi=divide-and-conquer(Pi); //递归的解各子问题
return merge(y1,...,yk); //将各子问题的解合并为原问题的解
}
#include <stdio.h>

//--------------------------------------------------------
// 打印搬运动作
//--------------------------------------------------------
int MoveIt(int x,int Source,int Target)
{
printf("Move %d From %d to %d\n",x,Source,Target);
return 0;
}

//--------------------------------------------------------
// 用 4 根柱子移动盘子
// n 是盘子个数,编号从1 到 n
// First 是源柱子号
// Second Third 是两根过渡柱
// Fourth 是目标柱
//--------------------------------------------------------
int MoveHanoi(int n,int First,int Second,int Third,int Fourth)
{
if (n<1) return 0; // 如果没有盘子就返回
if (n==1) // 如果只有一个盘子
{
MoveIt(n,First,Fourth); // 就直接从源柱子移到目标柱子上
return 0;
}
if (n==2) // 如果有两个盘子
{
MoveIt(n-1,First,Second); // 把上面的那片移到一个过渡柱上
MoveIt(n,First,Fourth); // 把下面的那片移到目标柱上
MoveIt(n-1,Second,Fourth); // 再把第 1 片从过渡柱移到目标柱上
return 0;
}
if (n==3) // 如果有 3 片盘子
{
MoveIt(n-2,First,Second); // 把最小的盘子移到一个过渡柱上
MoveIt(n-1,First,Third); // 把中间盘子移到另一过渡柱上
MoveIt(n,First,Fourth); // 把最大的盘子移到目标柱上
MoveIt(n-1,Third,Fourth); // 把中间盘子移到目标柱上
MoveIt(n-2,Second,Fourth); // 把最小的盘子移到目标柱上
return 0;
}
// 递归地把上面 n-2 盘子移到一个过渡柱上
// 留下最大的两个盘子
MoveHanoi(n-2,First,Third,Fourth,Second);
MoveIt(n-1,First,Third); // 把倒数第 2 个盘子移到另一个过渡柱上
MoveIt(n,First,Fourth); // 把最底下的盘子移到目标柱上
MoveIt(n-1,Third,Fourth); // 把倒数第 2 个盘子移到目标柱上
// 递归地把 n-2 个盘子从过渡柱上移到目标柱上
MoveHanoi(n-2,Second,First,Third,Fourth);
return 0;
}

int main()
{
MoveHanoi(4,1,2,3,4);
return 0;
}

C. hannoi算法问题

可以用递归的方式。
假设有3跟柱子A,B,C,需要把A柱子上的n个盘子全部搬到C柱子上。
分三步走:1.把n-1个盘子搬到B柱子上,2.把第n个盘子搬到C柱子上,3.把B柱子上的n-1个盘子搬到C柱子上。
函数可以这样:
void Hannoi(int n,char A,char B,char C)
{
if(n==1)
Move(1,A,C);
else
{
Hannoi(n-1,A,C,B);
Move(n,A,C);
Hannoi(n-1,B,A,C);
}
}

D. 算法的问题

着不是很简单的一段C语言嘛,循环三次,每次循环过程中,要求出入一个字符,循环完成后,然后退出运行。。。。

你追问哪个是输出输入输出字符串的,那个#include<math.h>没必要包含,你知道这些库文件的作用吗??

E. 求助算法问题

留个脚印..
没看清题..-.-不用截...
先对S排序
对于S的元素a0,a1,a2...an进行查询
取x=a0,y=an,
如果x+y>z,y=a(n-1),
如果x+y<z,x=a1.
即从两边向中间查询
如此直到两数和为z(结果),或者读取的两个数相等(无结果).

F. 计算机算法问题

这个最短平均排队时常其实就是要求大家等待的时间越短越好。从题目上看好像只有一个人来服务这n个人,所以如果希望大家等待的时间短的话,就应该将服务时间最长的人拍在最后,然后将服务时长第二长的排在倒数第二位...
如果要做算法就可以将服务时长作为权重,权重越大就排队越靠后。

G. C语言算法问题

这不是所有算法都必须的,是它这种算法的逻辑需要——当n是素数时一旦i*i>=n,就到i<n的判断处了,由于i<n,所以认为n是素数并输出,进入n+1判断下一个数是不是素数;但如果n不是素数,那么前面设置了一个i=n作记号,这时返回去i*i>=n了,也要跳到i<n的判断处,但这时由于i==n而不认为n是素数就不输出且直接进入n+1判断下一个数……所以你完全可以设计一个算法不要i<n的判断。这里只是为了与前面检测出n不是素数后设置的i=n这个记号相呼应的逻辑需要!

H. 一个算法问题

整个程序其实就是个求和
可以改写为
s=0;
for(l=1;l<=100;l++){
s=s+l^2;
}
system.out.println(s);
整个程序其实是求 1^2 +2^2 +3^2 +...+100^2 ,即 1 到 100 的平方和

I. 关于计算机算法问题

是这样 把思路转化为算法 然后化为程序语言(有各种的程序语言) 然后用特定的编译器执行语言 最后就是你看到的了

阅读全文

与算法问题相关的资料

热点内容
单片机各功能接口芯片 浏览:793
跳转收费系统源码 浏览:604
python3什么时候 浏览:708
惠州房车app哪个好 浏览:971
编译器查看内存 浏览:738
荣耀4a怎样加密短信 浏览:459
创建学生管理数据库的命令是什么 浏览:297
程序员渣女 浏览:30
androideclipse界面设计 浏览:350
向日葵传输桌面文件在哪个文件夹 浏览:97
linux怎么查看命令 浏览:99
linux设置可写权限 浏览:263
app为用户解决什么 浏览:824
微信营销pdf 浏览:915
舵机51单片机 浏览:715
驻波值命令 浏览:1003
易语言225编译器 浏览:234
苹果手机视频存储文件夹 浏览:453
剪映软件app怎么剪音乐 浏览:560
dos命令攻击 浏览:903