| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:求助一个最简单的算法题
只看楼主 加入收藏
machong
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-12-9
收藏
 问题点数:0 回复次数:7 
求助一个最简单的算法题
请写一个C程序,将3-100以内的所有素数保存到一个链式线性表中,最后按顺序将单链表中的所有数据输出到屏幕上。
搜索更多相关主题的帖子: 算法 
2008-12-09 08:54
s水
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-12-7
收藏
得分:0 
一个链式线性表
啥意思?
#include <stdio.h>
#include <math.h>
main()
{
 int n,i,k;
 for(n=3;n<=300;n++)
 { k=sqrt(n);
  for(i=2;i<=k;i++)
    if(n%i==0)
      break;
    if(i>=k+1);
      printf ("%5d",n);
  }
  getch();
  }
2008-12-10 11:47
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
呵呵,是作业吧?你把书上的建立链表的程序稍一修改就成了。
2008-12-10 13:03
machong
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-12-9
收藏
得分:0 
回复 第3楼 ying8501 的帖子
是作业!但是书上没有链表!
2008-12-11 22:36
machong
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-12-9
收藏
得分:0 
回复 第3楼 ying8501 的帖子
是作业!但是书上没有链表!
2008-12-11 22:36
choco1024
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:183
专家分:140
注 册:2008-8-31
收藏
得分:0 
不知道书上为啥要用链表,一般的就能把结果算出来,这里不适合用链表。以下是代码,楼主要是有不明白的地方那就再说了。
#include "stdio.h"
#include "math.h"
typedef struct LNode
{
    int data;
    struct LNode *next;
}SeqList;
void main()
{
    int n,i,k;
    SeqList *L=new SeqList;
    SeqList *R=new SeqList;
    L->next=NULL;
    R=L;
    for(n=3;n<=100;n++)
    {
        k=(int)sqrt(n);
        for(i=2;i<=k;i++)
        {
            if(n%i==0)
                break;
        }
        if(i>=k+1)
        {
            SeqList *S=new SeqList;
            S->data=n;
            R->next=S;
            R=S;
            S->next=NULL;
        }
    }
    while(L->next!=NULL)
    {
        printf("%d\t",L->next->data);
        L=L->next;
    }
}
2008-12-11 23:21
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
//请写一个C程序,将3-100以内的所有素数保存到一个链式线性表中,最后按顺序将单链表中的所有数据输出到屏幕上。
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#define M0 3
#define N0 100
#define NULL 0
#define  LEN  sizeof(struct prime)
#define PRIMENODE struct prime
int  count;  //全局变量,放结点个数
//--定义链表的结点类型
struct prime
{  int num;  
   PRIMENODE *next;
};
//=========================
//函数功能:判断整数n是否是一个素数
//入口参数: int n
//返回值:判断结果(真,假(1,0))
//==========================
int isprime(int n)
{
  int flag=0,i,k;
  k=sqrt(n);
  for(i=2;i<=k;i++)
     if(n%i==0) break;
  if(i>k)flag=1;
  return flag;
}
//=========================
//函数功能:建立素数的链表
//入口参数: 素数所在区间的两个端点
//返回值: 链表的头指针
//=========================
PRIMENODE *create(int m,int n)     
{
    PRIMENODE *head,*p1,*p2;
    int i;
 count=0;
 head=NULL;            
 p1=p2=(PRIMENODE *)malloc(LEN );
 for(i=m;i<n;i++)
 {
     if(isprime(i))
     {
        count++;
        p1=(PRIMENODE *)malloc(LEN ); //建立新结点
        p1->num=i;
        if(count==1)head=p1;  //连接新结点
        else p2->next=p1;
        p2=p1;    //p2总是指向新表尾
     }
        
}
 p2->next=NULL;
 return head;
}
//=========================
//函数功能:输出素数的链表
//入口参数: 链表的头指针
//返回值: 无
//=========================
void print(PRIMENODE *head)
{
    PRIMENODE *p;
    int i=0;
    printf("\t%d--%d中的素数有%d个:\n",M0,N0,count); //表头
    p=head;
    while(p!=NULL)
    {
        if(i%10==0)putchar('\n');
        printf("%5d",p->num);
        i++;  p=p->next;
    }
   printf("\n\n  ");
}
// 主函数
void main ()
{
 PRIMENODE *head;
 head=create(M0,N0);
 print(head);
}
2008-12-11 23:51
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
写完程序一看,原来有这么多朋友回帖,那么我也不能白写,凑个热闹吧。
程序代码:
/*------------------------------------------------------------------------------

        请写一个C程序,将3-100以内的所有素数保存到一个链式线性表中,最后按顺序
    将单链表中的所有数据输出到屏幕上.

=================================================================================

        此程序仅供学习参考之用,请在理解透彻之后再重写一篇,请不要拿它交作业。

        谢谢。

-----------------------------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct ST
{
    int data;
    struct ST *next;
}st;
st *p,*pr,*head;
void NEW()
{
    int i,j,SQRT;
    while((p=head=pr=(st *)malloc(sizeof(st)))==NULL);/* 申请内存空间*/
    for(i=3;i<=100;++i) /* 循环3~100之间的数值 */
    {
        SQRT=sqrt(i);/* 算出平方根 */
        for(j=2;j<=SQRT;++j)
            if((i%j)==0)    break;
        if(j>SQRT) /* 当发现素数时 */
        {
            p->data=i; /* 赋值 */
            pr->next=p;
            pr=p;
            while((p=(st *)malloc(sizeof(st)))==NULL); /*增加新的节点 */
            p->next=NULL;/* 最后的节点赋空值 */
        }
    }
}
void print()
{
    p=head;
    while(p->next!=NULL) /* 输出 */
    {
        printf("%d\n",p->data);
        p=p->next;
    }
    printf("\n");
}
int main(void)
{
    NEW();
    print();
    return 0;
}


2008-12-12 00:37
快速回复:求助一个最简单的算法题
数据加载中...
 
   



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

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