首页
社区
课程
招聘
[旧帖] [讨论]DEV C++中初学者编程 共同学习者顶起来 0.00雪花
发表于: 2010-5-22 17:40 74244

[旧帖] [讨论]DEV C++中初学者编程 共同学习者顶起来 0.00雪花

2010-5-22 17:40
74244
收藏
免费 0
支持
分享
最新回复 (280)
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
始学者的努力是大家要学习的,所以我们共同努力@@@@
2010-5-25 13:33
0
雪    币: 21
活跃值: (10)
能力值: ( 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次左右
2010-5-25 20:20
0
雪    币: 21
活跃值: (10)
能力值: ( 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]
2010-5-25 20:43
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
这里高手多 我这贴放这里还有意义吗? 都没什么人来顶!! 有种孤单的感觉
2010-5-26 07:14
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
今天终于可以回帖了,看看我有多少Kx?
2010-5-26 08:07
0
雪    币: 274
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
努力努力
2010-5-26 08:26
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
今天开始练习栈

外特性:后进先出(LIFO)
运用方面:
      交卷子
      KTV的“点歌单”
      作用:保护现场
逻辑结构:只在一端操作的线性表
数组实现:
        元素 stack : array[1..maxn] of integer
        栈顶指针 top

 练习题接着出来
2010-5-26 10:27
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
栈练习题1:
  一个数学表达式由下列元素组成:左括号,右括号,加号,减号,乘号,正号,负号,整数(无前导0)。给出一个长度不超过100的数学表达式,求它的值,要求考虑括号和乘法的优先级,计算过程中的临时值的绝对值保证不会超过 。给出的表达式保证合法以及符合人的书写习惯(但可能会有多余的括号对)。以下表达式被认为是合法的:((10+(-100))) ,-3*(+5+7*2)-(0) ,-0 ,(-3)*(-5+7)。以下表达式被认为非法:1+-7 ,--3+8 ,-3+() 。

用程序做一做。 
2010-5-26 10:31
0
雪    币: 114
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
34
最近正自学c语言呢,看到这贴觉得很亲切,顶一下
2010-5-26 11:58
0
雪    币: 114
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
35
楼主,能加你为qq好友呗,向你学习这方面的知识!
2010-5-26 11:59
0
雪    币: 1099
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
不错呀!对新人来说很好!有练习的机会!楼主支持你!
2010-5-26 12:12
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
顶起来,支持楼主.
2010-5-26 12:12
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
看来还是要多练练啊。。。。
2010-5-26 12:14
0
雪    币: 1099
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
楼主你Q多少加我下805066943
2010-5-26 12:15
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
C语言上有什么问题 我希望大家拿到这里来讨论

说实在的 我也算是初学者 因为自学进度太慢了 所以这长时间下来 我也还在打基础

大家有东东拿出来,在这里大家都能看到,会则跳过,不会则学习。只有这样我们才有大量看源程序的机会, 才有一定的程序经验。  

不要怕人家说什么, 只要是不会的 一句也可以拿出来讨论。

共同加油!!!!!
2010-5-26 12:29
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
前题中的表达式问题:

表达式分为:中缀表达式与后缀表达式
     
中缀表达式就和我们生活中习惯的表达式差不多,括号只用小括号.

后缀表达式是运算符在两个计算数的后面.

例:   23+(3*5-1)/2-5         是中缀表达式
     23 3 5 * 1 - 2 / + 5 - 是后缀表达式

这些有谁熟悉吗?

2010-5-26 19:01
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
不错噢   哈可一安徽啊啊  
2010-5-26 20:30
0
雪    币: 114
活跃值: (26)
能力值: ( 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
不是先进行自加再比较的吗,跟我讲讲好不
2010-5-27 11:11
0
雪    币: 21
活跃值: (10)
能力值: ( 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 再运行条件比较,再就退出循环   因为这是直到型循环的表现  但这种写法一定是当型循环 我晕晕了
2010-5-27 11:36
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
另 发布前一例题表达式问题的求解思路:

例题为栈的运用, 要求用栈的方法计算表达式的值. 所以解题过程应是:

1、将中缀表达式转化成标准式,即按算的先后添加小括号
2、将标准中缀表达式用栈转化成后缀表达式
3、用栈计算后缀表达式,求出表达式的值。

2010-5-27 11:41
0
雪    币: 21
活跃值: (10)
能力值: ( 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);

}
2010-5-27 11:50
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
顶一个,有问题一定想到你DDDDDDD
2010-5-27 12:21
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
while (k++<=n) m*=2;
此句应是先判断再k++,是当性循环
2010-5-27 13:30
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
同意楼上的说法 同意楼上的说法 看来应只能是这样了    不过,我也有些想不通:++的运算等级比<=要高 按理应先++  
所以我想不通
2010-5-27 14:23
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
支持下楼主
2010-5-27 17:20
0
游客
登录 | 注册 方可回帖
返回
//