能力值:
( LV2,RANK:10 )
|
-
-
26 楼
始学者的努力是大家要学习的,所以我们共同努力@@@@
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
找到一个较简捷的算法,写起来好简单了 哈!!
#include <stdio.h>
int a[100]; /* 猴子的取值范围 m<100 */
int main()
{
int m,n,i,x=0,j;
scanf("%d%d",&m,&n); /* 输入猴子数m<100 报数数值n<100 */
for(i=1;i<=m;i++) a[i-1]=i; /* 对数组a[m]赋值即猴子的编号 */
freopen("out.txt","w",stdout);
printf("m=%d\nn=%d\n",m,n);
dd:;
while(m>n) /* 判断是否选出猴王m<=n就知猴王是a[0] */
{
for(i=0;i<=m-n;i++)
a[i+n-1]=a[i+n];
m=m-1;
for(i=0;i<n-1;i++)
a[i+m]=a[i];
m=m+n-1;
for(i=0;i<m-1;i++)
a[i]=a[i+2];
m=m-n+1;
}
printf("a[0]=%d",a[0]);
}
测试通过!!!! 时间复杂度为 (m-n)*(m-n+n-1+m-1)=(m-n)(2m)=2mm-2mn 取满值为20000次左右
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
站一圈时谁都是头,设这圈中设一个猴子为1号,我们把它当第一个猴。
第一步:分配m个数组元素分别存{1 2 3 ... m } 这样保存猴王的编号。
第二步:报数,报到第一个n 时就删除 且m=m-1;此时数组脚标为n-1
第三步:从0到n-2脚标的元素移到数组尾部
第四步:删除上一步已去尾部的数组元素将紧连的元素前移重新构造数组a[m]然后
回第二步继续报数直到m=n;
第五步:输出a[0]猴王的编号
这样一圈猴子的问题就等效于a[m]的一排猴子排队报数的问题了
以6个猴子报3,为例:
数组脚标 0 1 2 3 4 5
数组保存的值 1 2 3 4 5 6
报数 1 2 4 5 6 报到3的删了 后面的前移
当前报数位置在 ^
位置前的1 2 后移 4 5 6 1 2
整个数组前移 4 5 6 1 2
当前报数位置在 ^
再重新报数循环 直到 m=n
输出 a[0]
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
这里高手多 我这贴放这里还有意义吗? 都没什么人来顶!! 有种孤单的感觉
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
今天终于可以回帖了,看看我有多少Kx?
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
努力努力
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
今天开始练习栈
外特性:后进先出(LIFO)
运用方面:
交卷子
KTV的“点歌单”
作用:保护现场
逻辑结构:只在一端操作的线性表
数组实现:
元素 stack : array[1..maxn] of integer
栈顶指针 top
练习题接着出来
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
栈练习题1:
一个数学表达式由下列元素组成:左括号,右括号,加号,减号,乘号,正号,负号,整数(无前导0)。给出一个长度不超过100的数学表达式,求它的值,要求考虑括号和乘法的优先级,计算过程中的临时值的绝对值保证不会超过 。给出的表达式保证合法以及符合人的书写习惯(但可能会有多余的括号对)。以下表达式被认为是合法的:((10+(-100))) ,-3*(+5+7*2)-(0) ,-0 ,(-3)*(-5+7)。以下表达式被认为非法:1+-7 ,--3+8 ,-3+() 。
用程序做一做。
|
能力值:
( LV4,RANK:50 )
|
-
-
34 楼
最近正自学c语言呢,看到这贴觉得很亲切,顶一下
|
能力值:
( LV4,RANK:50 )
|
-
-
35 楼
楼主,能加你为qq好友呗,向你学习这方面的知识!
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
不错呀!对新人来说很好!有练习的机会!楼主支持你!
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
顶起来,支持楼主.
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
看来还是要多练练啊。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
楼主你Q多少加我下805066943
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
C语言上有什么问题 我希望大家拿到这里来讨论
说实在的 我也算是初学者 因为自学进度太慢了 所以这长时间下来 我也还在打基础
大家有东东拿出来,在这里大家都能看到,会则跳过,不会则学习。只有这样我们才有大量看源程序的机会, 才有一定的程序经验。
不要怕人家说什么, 只要是不会的 一句也可以拿出来讨论。
共同加油!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
前题中的表达式问题:
表达式分为:中缀表达式与后缀表达式
中缀表达式就和我们生活中习惯的表达式差不多,括号只用小括号.
后缀表达式是运算符在两个计算数的后面.
例: 23+(3*5-1)/2-5 是中缀表达式
23 3 5 * 1 - 2 / + 5 - 是后缀表达式
这些有谁熟悉吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
不错噢 哈可一安徽啊啊
|
能力值:
( LV4,RANK:50 )
|
-
-
43 楼
int k,n,m;
n=10;m=1;k=1;
while (k++<=n)m*=2;
printf ("%d\n",m);
答案给出结果是1024,机试也是1024我想请教大虾们,为何不是512
不是先进行自加再比较的吗,跟我讲讲好不
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
程序运行结果是这样的:
k++=2 m=2
k++=3 m=4
k++=4 m=8
k++=5 m=16
k++=6 m=32
k++=7 m=64
k++=8 m=128
k++=9 m=256
k++=10 m=512
k++=11 m=1024
很明显, 在条件中是先K=K+1, 然后再比较, 而结果也应是1024; 从上表中,你会发现运行循环体是在条件之前的. k++=11,时运行了m*=2 再运行条件比较,再就退出循环 因为这是直到型循环的表现 但这种写法一定是当型循环 我晕晕了
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
另 发布前一例题表达式问题的求解思路:
例题为栈的运用, 要求用栈的方法计算表达式的值. 所以解题过程应是:
1、将中缀表达式转化成标准式,即按算的先后添加小括号
2、将标准中缀表达式用栈转化成后缀表达式
3、用栈计算后缀表达式,求出表达式的值。
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
43楼的这个问题 有高手解释没有??
本来应是当型循环 怎么运行趣来是 直到型循环一样的效果了 !!
#include <stdio.h>
int main()
{
freopen("out.txt","w",stdout);
int k,n,m;
n=10;m=1;k=1;
while (k++<=n)
{
m*=2;
printf("k++=%d m=%d \n",k,m);
}
printf ("%d\n",m);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
顶一个,有问题一定想到你DDDDDDD
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
while (k++<=n) m*=2;
此句应是先判断再k++,是当性循环
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
同意楼上的说法 同意楼上的说法 看来应只能是这样了 不过,我也有些想不通:++的运算等级比<=要高 按理应先++
所以我想不通
|
能力值:
( LV2,RANK:10 )
|
-
-
50 楼
支持下楼主
|
|
|