VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3549|回复: 20

求个破题,弄了我一个下午了。

[复制链接]

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-18 02:00:01 | 显示全部楼层 |阅读模式
某学校的考研题
(一)子程序sort()对链表进行直接选择排序,实施排序的链表不带标志结点,首指针由参数提供。为排序方便,本函数于排序前为链表添一个辅助头标志结点,排序完成后再把这个结点删除。
typedef struct node
{
   int value;
   struct node *next;
}node;

void sort(_______(1)_______h)
{
    struct node *p,*q,*r,*s,*h1;   
    h1=p=(node*)malloc(sizeof(node));
    p->next=*h;
    while(p->next)
    {
       q=p->next;
       r=p;
       while(q->next)
       {
           if(q->next->value < _______(2)_______)
              r=q;
           q=q->next;           
        }
        if(r!=q)
        {
            s=_______(3)_______;
            _______(4)_______=s->next;
            s->next=_______(5)_______;
         }
        p=p->next;
    }
    *h=_______(7)_______;
    free(h1);
}

(二)

如下程序输入一个方阵的阶数和“幸运数”,生成星云方阵。幸运方阵是这样的:划去它的任意一行和任意一列,记下交叉点的值;再在方阵剩余部分任意划去一行和一列,再记下交叉点的值;继续这一过程,当方阵不剩任何值时,所有记下的值之和恰好为预先指定的那个幸运数。
程序中rand()功能:返回一个随机的正整数。

#define N 30
#include <stdio.h>
#include <math.h>

void main()
{
   int lucky[N][N],row[N],col[N];
   int n,lucky_n,k,sum=0,i,j;
   printf("请输入方阵阶数");scanf("%d",&n);
   printf("请输入幸运数字");scanf("%d",&lucky_n);
   k=lucky_n/n;
   if(k==0) printf(“输入数值太小”);
   for(i=0;i<n;i++)
   {
      row[i] = rand()%k;
      col[i] = rand()%k;
      sum+=_______(1)_______;
    }
    col[n-1]+=_______(2)_______;
    for(i=0;i<n;i++)
       for(j=0;j<n;j++)
           _______(3)_______;
    for(i=0;i<n;i++)
    {
       for(j=0;j<n;j++)
           printf("%d",_______(4)_______);
     }
}
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-4-22 21:30:01 | 显示全部楼层
自己顶
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-4-23 11:00:01 | 显示全部楼层
(一)是不是题目有问题啊
回复

使用道具 举报

0

主题

25

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-23 11:15:01 | 显示全部楼层
还考研题,
自己做
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-4-25 09:45:01 | 显示全部楼层
不难,思路清晰就好
回复

使用道具 举报

0

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-25 20:45:02 | 显示全部楼层
题目一,感觉好象是采用类似于数组冒泡排序法的方式给链表排序.

不过表达的方式有点不是很好理解.

MARK
回复

使用道具 举报

1

主题

14

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-27 14:15:01 | 显示全部楼层
顶lz,加油
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-4-28 20:00:01 | 显示全部楼层
选择排序,理解思路就行

//
// 从数据中选择最小的同第一个值交换,
// 再从剩下的部分中选择最小的与
// 第二个交换,这样往复下去。
//
template<typename T>
void SelectSort(T* pData, int Count)
{
    int iTemp = 0;
    int iPos = 0;
    for (int i = 0; i < Count - 1; i++)
    {
        iTemp = pData[i];
        iPos = i;
        for (int j = i + 1; j < Count; j++)
        {
            if (pData[j] < iTemp)
            {
                iTemp = pData[j];
                iPos = j;
            }
        }
        pData[iPos] = pData[i];
        pData[i] = iTemp;
    }
}
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-5-12 14:30:01 | 显示全部楼层
(2)
#define N 30
#include <stdio.h>
#include <math.h>

void main()
{
   int lucky[N][N],row[N],col[N];
   int n,lucky_n,k,sum=0,i,j;
   printf("请输入方阵阶数");scanf("%d",&n);
   printf("请输入幸运数字");scanf("%d",&lucky_n);
   k=lucky_n/n;
   if(k==0) printf(“输入数值太小”);
   for(i=0;i<n;i++)
   {
      row[i] = rand()%k;
      col[i] = rand()%k;
      sum+=_______(1)_______;row(i)+col(i)
    }
    col[n-1]+=_______(2)_______;lucky_n-sum;
    for(i=0;i<n;i++)
       for(j=0;j<n;j++)
           _______(3)_______;lucky[i][j]=row[i]+col[j]
    for(i=0;i<n;i++)
    {
       for(j=0;j<n;j++)
           printf("%d",_______(4)_______);lucky[i][j]
     }
}
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-5-14 08:15:01 | 显示全部楼层
期待第二条的答案.
偶做了以后还是不能得出结果.
希望高手指点一下.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表