| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:链表指针问题
只看楼主 加入收藏
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
结帖率:69.57%
收藏
已结贴  问题点数:20 回复次数:8 
链表指针问题
n个人编号为 [s + 1 , s + n],有 n个座位编号为 [1 , n],编号为 i的人只能坐到编号为它的约数的座位,问每个人是否都有位置坐。s,n随机输入
2016-10-31 22:47
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
很难吗?根据输入的s,n,踏踏实实一步一个脚印跑遍历循环测试一下不就知道了。。。

另外,这和链表指针有半毛关系?标题起的不恰当

φ(゜▽゜*)♪
2016-11-01 08:34
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
我做了一下,算法好像走迷宫和解数独一样,用栈~工程量很大,现在只是把数据初始化,算法还在实践中
@书生牛犊——谁都知道用循环,你试试光用循环结构求迷宫最短路程解给我看看,看看你用不用栈。

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-01 13:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
回复 3楼 九转星河
其实想到了也不难,可以不用栈甚至可以不用指针链表。主要思想是排列。
代码如下:
程序代码:
#include<stdio.h>
#include<stdlib.h>
//#define N 5--测试用,可以删
//void begin();//初始化处理——测试用,可以删
int change(int []);//操作函数
void number(int [],int);//排序函数
void swap(int *,int *);//交换函数
void print(int []);//输出函数
int n;
/*void begin()
{
    int i,a[N];
    for (i=0;i<N;i++)
    scanf("%d",&a[i]);//输入数字
    printf("\n");
    number(a,0);//对输入数进行排序
    print(a);
    change(a);//执行操作      //这份原稿是排列用可以删
}*/
int change(int a[])
{
    int i,k1,k2;
    for (i=k1=0;i<n-1;i++)
    if (a[i]<a[i+1])
        k1=i+1;//a[k1]为右端数的最大值
    if (!k1)return 0;
    for (k2=k1;k2<n-1;k2++)
       if (a[k1-1]<=a[k2]&&a[k1-1]>=a[k2+1])
           break;//k2为交换数据的关键值
    swap(&a[k1-1],&a[k2]);//交换数值
    number(a,k1);
    return (k1);
}
void swap(int *a,int *b)//交换两数值的函数
{    
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
void number(int a[],int k1)//排序函数
{
    int i,j,u;
    for (i=k1,u=0;i<n;i++,u++)
        for (j=k1;j<n-1-u;j++)
            if (a[j]>a[j+1])
                swap(&a[j],&a[j+1]);//交换数值
}
void print(int a[])
{
    int i;
    for (i=0;i<n;i++)
        printf("%4d",a[i]);
    printf("\n");
}
int main()
{
    int i,j,k=1,s,t=0;
    int *man,*set;
    scanf("%d%d",&n,&s);
    man=malloc(n*sizeof(int));
    set=malloc(n*sizeof(int));
    for (i=0;i<n;i++)
    {
        set[i]=i+1;
        man[i]=s+i+1;
    }
    number(man,0);
    while (k!=0)
    {
        for (i=0,t=1;i<n;i++)
            for (j=0;j<n;j++)
                if (man[i]%set[i]!=0)
                    t=0;
        if (t==1)break;
        k=change(man);
    }
    if (t==0)printf("该情况不可行!\n");
    else
    {
        printf("有可能,情况如下:\n");
        print(set);
        print(man);
    }
    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-01 21:32
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 4楼 九转星河
不管怎么看,你的思路都错的。
还有就是这段代码必要排序吗,难道一开始不是从小到大的顺序存入数组的???
收到的鲜花
  • 九转星河2016-11-01 22:27 送鲜花  2朵   附言:我很赞同
2016-11-01 22:18
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 linlulu001
其实这段代码是我从一个排列程序中提炼出来解这题的,只是顺手复制过来用,想不到这题删了排序函数也能解,多谢啦。

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-01 22:27
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
回复 5楼 linlulu001
删了排序函数不行啊,我刚才测试过,删了会漏掉情况的
以下是引用linlulu001在2016-11-1 22:18:02的发言:

不管怎么看,你的思路都错的。
还有就是这段代码必要排序吗,难道一开始不是从小到大的顺序存入数组的???

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

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-01 22:39
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
收藏
得分:0 
回复 2楼 书生牛犊
最近才开始学链表,然后老师就布置了这一道题。我还以位是用链表做呢
2016-11-04 11:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
鉴定完毕~判断连通分量上是否存在哈密顿回路~

[此贴子已经被作者于2017-12-21 23:54编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-21 16:18
快速回复:链表指针问题
数据加载中...
 
   



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

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