| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1173 人关注过本帖
标题:大家出的题太难了,我说一个简单的供初学者联系 数7
只看楼主 加入收藏
woshiaokeman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:123
注 册:2011-4-5
收藏
得分:0 
我比较喜欢叫他猴子选大王
2012-01-17 22:15
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
貌似没好好看楼主的题目,没考虑结尾是7的情况。修改:
程序代码:
#include  <stdio.h>

#define  N 101

int  main(void)

{
    int  a[N] = { 0 }, i, k = 0, j = 1;

    int m = 0, n;

    printf("Please input n:");   

    scanf("%d", &n);             // 千万别输比N - 1大的数哦, 要不然先改N的宏:)

    printf("\n");

    for (i = 1; i <= n; i++)

        a[i] = i;

    i = 1;

    while (m < n - 1)

    {      
        if (a[i])      
           
               k++;

                if ((k % 7 == 0  || k % 10 == 7 ) && a[i])
      
                {
                   a[i] = 0;

                   printf("%-3d-->  ", i);

                   m++;
                     
                    if (j++ % 6 == 0)

                        printf("\n");
                }
          
                if (i == n)

                    i = 0;

                    ++i;                         
    }

    printf("\n\nThe last one is ");

    for (i = 0; i <= n; i++)

    {
        if (a[i] != 0)

            printf("number %d\n", i);
    }

    printf("\n");

    return  0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 有容就大 于 2012-1-17 23:57 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-17 22:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵,這個遊戲是喝酒才好玩的。一開始沒醉時,就看腦筋算數,曾經數到200以上,手指頭劃來劃去筆算的都出來了。喝的高了,就總死在24、27、28上,還有在24時不作聲叫他喝酒還大聲質問24有什麼問題的。

其實,把人抽出來,當然不會死循環,因為那就是約瑟夫環程序,但樓主出題時可沒說要抽人,也沒有具體的玩法。誰知道呢,反正閒聊也是樂趣,過年了。

授人以渔,不授人以鱼。
2012-01-17 22:24
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 13楼 TonyDeng
如果把数字喊出来了,就出局了.

人是要抽出来的。
2012-01-17 22:58
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 12楼 有容就大
工整! 好像和我当时看的书的写法是一致的。

大家也可以用线性表,链表尝试一下。

可以再加上一共喊到多少数才剩下最后一个。
2012-01-17 23:02
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 12楼 有容就大
你这个级别的做这个题,有点大材小用了。。呵呵。
2012-01-17 23:03
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
我写个循环链表的,看看有什么缺陷,我链表不怎么会用。

上代码:
程序代码:
#include  <stdio.h>

#include  <malloc.h>

#define   LEN  sizeof(struct  nodelist)

typedef   struct  nodelist

{
    int  num;

    struct  nodelist  *next;

}LIST;

int  main(void)

{
    LIST *head, *end, *p1, *p2;

    int n, i, m = 0, k = 0, j = 1;

    head = NULL;

    printf("Please  input n:");

    scanf("%d", &n);

    printf("\n");

    p1 = p2 = (LIST *)malloc(LEN);

    head = p1;

    for (i = 1; i < n; i++)

    {
        p1 = (LIST *)malloc(LEN);

        p2 -> next = p1;

        p2 = p2 -> next;
    }

    end = p2;

    end -> next = head;

    p1 = head;  i = 1;

    do {
         p1 -> num = i;

         i++;

         p1 = p1 -> next;

          }while (p1  != head);

    p1 = head;

    p2 = end;

    while (m < n -1)

    {
            k++;

        if (k % 7 == 0 || k % 10 == 7) 

        {
             printf("%-3d-->  ", p1 -> num);

             if (j++ % 7 == 0) 
                
             {
                 printf("\n");
             }

             m++;
            
             p2 -> next = p1 -> next;
         
             p1 = p1 -> next;

        }
       
        else
       
        {
            p2 = p1;

            p1 = p1 -> next;
        }
    }

    printf("\n The last number is %d\n\n", p1 -> num); 

    printf("Yell %d times.\n\n", k);
   
     free(p1);

    return  0; 

}

图片附件: 游客没有浏览图片的权限,请 登录注册


我有个问题:malloc后要手动free我那个free(p1);能达到目的吗?对这个很纠结,弄不懂怎么放, 究竟是放指针还是放内存?


[ 本帖最后由 有容就大 于 2012-1-18 00:00 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-17 23:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 16楼 share32
别这么说,很多东西你看着简单,要是真的敲出来还是很需要一番功夫的,一起学习

梅尚程荀
马谭杨奚







                                                       
2012-01-17 23:20
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用有容就大在2012-1-17 23:17:03的发言:

我写个循环链表的,看看有什么缺陷,我链表不怎么会用。

上代码:#include  <stdio.h>

#include  <malloc.h>

#define   LEN  sizeof(struct  nodelist)

typedef   struct  nodelist

{
    int  num;

    struct  nodelist  *next;

}LIST;

int  main(void)

{
    LIST *head, *end, *p1, *p2;

    int n, i, m = 0, k = 0, j = 1;

    head = NULL;

    printf("Please  input n:");

    scanf("%d", &n);

    printf("\n");

    p1 = p2 = (LIST *)malloc(LEN);

    head = p1;

    for (i = 1; i < n; i++)

    {
        p1 = (LIST *)malloc(LEN);

        p2 -> next = p1;

        p2 = p2 -> next;
    }

    end = p2;

    end -> next = head;

    p1 = head;  i = 1;

    do {
         p1 -> num = i;

         i++;

         p1 = p1 -> next;

          }while (p1  != head);

    p1 = head;

    p2 = end;

    while (m < n -1)

    {
            k++;

        if (k % 7 == 0 || k % 10 == 7)

        {
             printf("%-3d-->  ", p1 -> num);

             if (j++ % 7 == 0)
               
             {
                 printf("\n");
             }

             m++;
            
             p2 -> next = p1 -> next;
         
             p1 = p1 -> next;

        }
      
        else
      
        {
            p2 = p1;

            p1 = p1 -> next;
        }
    }

    printf("\n The last number is %d\n\n", p1 -> num);

    printf("Yell %d times.\n\n", k);
   
     free(p1);

    return  0;

}


我有个问题:malloc后要手动free我那个free(p1);能达到目的吗?对这个很纠结,弄不懂怎么放, 究竟是放指针还是放内存?


free()  函数名: free   功 能: 与malloc()函数配对使用,释放malloc函数申请的动态内存。(另:如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。)   用 法: void free(void *ptr);

free(内存地址(空类型指针));
free(p1);是p1指向的内存地址 并不是释放指针.
你要释放指针的话free(&p1); 这样才可以。。
那么free 对p连续操作两次就会导致程序运行错误
你就可以做测试快乐。

链表不会用的话 还是要真的明白 链表的本质。就随便你怎么写 链表了。。。

用心做一件事情就这么简单
2012-01-21 10:52
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 19楼 小鱼儿c
谢谢你的讲解,我上面的程序是把循环链表逐个删除留下最后一个,那么每删除一个就应当释放一个申请的内存,如何做到删一个释放一个呢?
还有你说 free(p1);是p1指向的内存地址 并不是释放指针.  那么释放一个链表的头指针指向的内存地址是不是就能释放整个链表占据的内存?

梅尚程荀
马谭杨奚







                                                       
2012-01-21 11:13
快速回复:大家出的题太难了,我说一个简单的供初学者联系 数7
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028094 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved