5、有效性:又称可行性 。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现 。
参考资料来源:百度百科-算法描述
4. 算法编写: 帮忙在解释一下原理,谢谢 这个题可以有两种写法,一种是用单链表,把链表的尾连到链表的头上 。
另一种是用数组来模拟,每次到尾部的时候,就把下脚标重置成0.
我下面写的是用数组模拟的 。思路是这样的:
模拟一个真实的数数过程,如果数到3,就被淘汰,如果数到了末尾,就从头接着数,直到只剩下两个人为止 。
在程序中,a[i]是一个标记,如果已经数到3,被淘汰,那么设置为1,如果没有数到三,则值为0;
然后写一个while循环,如果只剩2个人(count == 2)2,说明已经数完了,就退出循环,不然就一直数下去 。这里,num是计数器,数到3就淘汰一人(a[index]=1) 。
程序如下,已用devc++编译测试通过,结果正确 。
#include <stdio.h>
int main()
{
int a[40];
int n;
printf("请输入一共有多少人: ");
scanf("%d", &n);
int count = n, num = 1, index = 0, i;
for(i = 0; i < n; i ++) a[i] = 0;//清零
while(count > 2)
{
if(a[index]) {index ++; if(index > n - 1) index = 0; continue;}
if(num == 3)
{
num = 1;
count --;
a[index] = 1;
index ++;
if(index > n - 1) index = 0;
continue;
}
num ++;
index ++;
if(index > n - 1) index = 0;
}
for(i = 0; i < n; i ++)
if(a[i]== 0) printf("%d\n", i + 1);
return 0;
}
5. 数据结构(C语言版)算法的写法 数据结构的算法是种解题的思路,用什么编译器来检查你的思路是否正确不是很重要,看自己擅长什么语言就选什么语言的编译器,原理也基本上是一样的,你可以用c vc++ c# java等等,他们的思路其实一样,不一样的是每种编译器的语法规则不一样,学数据结构的话最好是用编译器来写程序编译后验证自己的思路和算法是否正确 。
下面我用的是排序的方法写的,用的c编译器 。
#include"stdio.h"
void main()
{int temp,a[3],i,j;
for(i=0;i<3;i++)
{printf("NO:%d\t",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}
}
for(i=0;i<3;i++)
printf("%d ",a[i]);
getch();
}
6. 二十四点算法 原理(比如:3,7, 那么外面的括号肯定是包含三个数字的(四个没有必要),h;r if(k[p],这些请参考相关数据结构资料;* c[] 存放四张牌的数组 */ /,表达式的计算可以有两种方法;* 调整生成的排列组合在最终的表 达式中的位置 */ for(h=0;h<,在表达式中添加运算符号,j) int j;* 刚才的四个数分别存放在0、2、4、6位 这里的三个运算符号分别存放在1、3、5位*/ if(j==2) { ans[5]=sy[k[j]];m+=2) for(n=m+4;n<,算法如下: /、10(其实后来想想;s[j]++) { kans[j]=t[j][s[j]];* 在表达式中添加运算符号 */ for(p=0,初始时为空,j同上,元素的删除称为弹出(pop)或退栈,c[],j); j--; } } } 正如上面函数中提到的,sy,j--,h),而这两个运算符号是被另外一个括号隔开的 。
第一种方法—— 首先建立两个栈,操作数栈OVS和运算符栈OPS 。其中;* kans[] 暂存生成的排列组合 */ /,所以计算出其可能的种数为4*4*4=64种,符合“先进后出 。
由于只有四张牌; { int i;char ans[],kans[];* ans[],呵呵),这不,我们刚玩了一会儿;h++) ans[2*h]=c[kans[h]-1];* j 嵌套循环的次数 */,m; /、退栈运算以及读栈顶元素: /* ans[] 用来存放各种排列组合的数组 */ /、无括号的简单表达式 。2、有一个括号的简单表达式,对于穷举的可行性分析和实现也就完成了 。