| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖
标题:寻找给定电话号码中是否有包含关系的程序
只看楼主 加入收藏
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
结帖率:0
收藏
 问题点数:0 回复次数:0 
寻找给定电话号码中是否有包含关系的程序
这是OJ的一个题目:输入n个电话号码。判断n个电话号码,是否有包含关系,比如n=2,输入1769  和176954123 。则存在包含关系,输出NO
若输入1769 和176542234 则不存在包含关系,输出YES  我的代码 在编译器上跑没问题,但放到OJ上,出现在runtime error
以下是代码:
#include<stdio.h>
#include<string.h>
#define MAX 10
/*用字典树进行遍历*/
typedef struct Trienode  
{
    int nCount;// 创建了结点,ncount变为1,字符串的最后一个结点,ncount变为负值
    struct Trienode* next[MAX];//代表0到9 的指针,指向下一结点
}TrieNode;

TrieNode Memory[1000000];
int allocp = 0;//使用Memory数组的循环数
TrieNode* CreateTrieNode()//创建一个新的结点
{
    int i;
    TrieNode *p;
    p = &Memory[allocp++];
    p->nCount = 1;
    for (i = 0; i<MAX; i++)
    {
        p->next[i] = NULL;
    }
    return p;
}
int InsertTrie(TrieNode**pRoot,char *s)
{
    int i,k;
    TrieNode*p;
    if(!(p=*pRoot))    //若指向根结点的指针为NULL,创建根结点
    {
        p=*pRoot=CreateTrieNode();
    }
    i=0;
    while(s[i])          //插入结点
    {
     k=s[i++]-'0';
     if(p->next[k]==NULL) p->next[k]=CreateTrieNode();
     else (p->next[k]->nCount)++;
     p=p->next[k];
     if(p->nCount<0)   //若当前字符串比存在树中的字符串长,判断树中字符串是否存在当前字符串中
         return -1;
    }
     p->nCount=-1002; //字符串最后一个结点的标志
     for(i=0;i<MAX;i++)
        if(p->next[i]!=NULL) //若当前字符串比存在树中的字符串短,判断当前字符串是否包含在前面字符串中
        return 1;
        return 0;// 当前字符串和存在树中的字符串互不包含
}
int main(void)
{
    int num, i,j;
    scanf("%d",&num); //输入 要输入的电话号码的个数
    getchar();
    char pnum[num][50]; //存储电话号码
    TrieNode *pRoot; //指向根结点的指针
    pRoot=NULL;
    while (num != 0)
    {
        for (i = 0; i < num; i++)
            gets(pnum[i]);  //输入电话号码
        for (i = 0; i < num;i++)
            {
                j=InsertTrie(&pRoot,pnum[i]); // 将电话号码存入树中,并比较
             if(j==1||j==-1)
             {
                 printf("NO\n");  //若存在包含关系,输出NO
                 break;
             }
            }
            if(j==0)
                printf("YES\n");  //不存在包含关系 输出YES
        scanf("%d",&num);
        getchar();
    }
    return 0;
}
搜索更多相关主题的帖子: include 编译器 字符串 
2015-10-03 10:28
快速回复:寻找给定电话号码中是否有包含关系的程序
数据加载中...
 
   



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

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