| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7501 人关注过本帖
标题:[讨论]第八次编程题目,谢谢大家的支持.
只看楼主 加入收藏
oooccc1
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-3-21
收藏
得分:0 
又去读了题目,没有发现关于同级嵌套是否合法的描述。。。不过两个check分别处理两种情况了
2007-03-21 23:30
Rafa
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-3-21
收藏
得分:0 
回复:(nuciewth)[讨论]第八次编程题目,谢谢大家的支...

//第一题匹配括号字符的解答,双向链表加堆栈
//另外有研究五子棋的没,本人希望跟各位讨论讨论,最好合作。

//那个程序我已传到一个帖子上面。有兴趣的可以去看看! :D

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

typedef char DataType;

typedef struct node
{
DataType data;
struct node * L_link;
struct node * R_link;
}Node;

Node * top;
Node * tail;

int flag_for_tail = 0;
int flag_for_first_top = 0;

void Push( DataType x )
{
Node * p;
p = ( Node * )malloc(sizeof(Node)); //建立的一个双向链表
p->data = x;
p->R_link = NULL;

if( flag_for_first_top == 0 )
{
top = p;
flag_for_first_top = 1;
}
else
{
p->L_link = top;
top->R_link = p;
top = p;
}


if( flag_for_tail == 0 ) //用来设置tail 指针
{
tail = p;
flag_for_tail = 1;
}

}

DataType Pop( )
{
Node * p;
DataType x;

x = top->data;
p = top;
top = top->L_link;
top->R_link = NULL;
free( p );

return x;
}

DataType Get_tail_value_and_Change_tail( )
{
Node * p;
DataType x;

x = tail->data;
p = tail;
tail = tail->R_link ;
tail->L_link = NULL;
free( p );

return x;
}

int _tmain(int argc, _TCHAR* argv[])
{
char str[100];
int i = 0;

char kk[2] ;

int ori_dengji = 5;

int temp_dengji = 5;

int number = 0;
printf("\n\n\t\t\t字符扫描匹配系统 \n\n\n");

printf("\n\n\t题目:给出一个包含各种括号的表达式,判断括号是否配对。括号配对的条件:\n");
printf("\n\n括号必须先左后右,并且左右括号数量相等;对于多重括号,从外到内嵌套顺序为:\n");
printf("\n\n{} -> [] -> () -> <>。例如{[(<>)]}。合法返回true, 否则返回false\n");
printf("\n\n\n\n\t输入范例:\n\n\n");
printf("\t\t{[(<>)]}\n");
printf("\t\t{}\n");
printf("\t\t<(>)\n");
printf("\t\t<()>\n\n");
printf("\t\t返回:\n");
printf("\t\ttrue\n");
printf("\t\ttrue\n");
printf("\t\tfalse\n");
printf("\t\tfalse\n");


printf("\n\n\n\tInput the string(请输入你想检测的括号串,并且以'!'结尾):");
gets(str);
while(str[i]!='!')
{
Push( str[i] ); //先将所有的字符入堆栈
i++;
}
if( i % 2 == 1 )
{
printf("\n\t经扫描,此字符串不匹配\n");
getchar();
getch();
return 0;
}

while( number < i % 2 + 1 )
{
kk[0] = Pop( );
kk[1] = Get_tail_value_and_Change_tail( );

if( kk[1] == '{' )
{
temp_dengji = 4;
if( temp_dengji > ori_dengji )
break;
if( kk[0] != '}' )
break;
ori_dengji = temp_dengji;
}
else if( kk[1] == '[' )
{
temp_dengji = 3;
if( temp_dengji > ori_dengji )
break;
if( kk[0] != ']')
break;
ori_dengji = temp_dengji;
}
else if( kk[1] == '(' )
{
temp_dengji = 2;
if( temp_dengji > ori_dengji )
break;
if( kk[0] != ')' )
break;
ori_dengji = temp_dengji;
}
else
{
temp_dengji = 1;
if( temp_dengji > ori_dengji )
break;
if( kk[0] != ']' )
break;
ori_dengji = temp_dengji;
}
number++;
}

if( number == i % 2 + 1)
printf("\n\t经扫描,此字符串匹配\n");
else
printf("\n\t经扫描,此字符串不匹配False\n");

getchar();
getch();
return 0;
}


Ho3P5KnY.rar (34.54 KB) [讨论]第八次编程题目,谢谢大家的支持.


[此贴子已经被作者于2007-3-23 10:52:27编辑过]

2007-03-23 10:36
sanas
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-5-14
收藏
得分:0 
费尽千辛万苦终于写完,好像没有BUG吧。。。
有人帮给看看吗?
#include<stdio.h>
#include<string.h>


main()
{
   int i,j;
   int num,len;
   char a[50];
   scanf("%s",a);
   len=strlen(a);
   if(len%2!=0)
   {
      printf("false!");
      getch();
      return 0;
   }


   for(i=0;i<len;i++)
   {
      if(a[i+1]=='>'&&a[i]!='<')
      {
         printf("false 1!");
      getch();
         return 0;
      }
      if(a[i+1]=='>'&&a[i]=='<')
      {
         for(j=0;j<len-i;j++)
         a[i+j]=a[i+j+2];
         a[len-1]='\n';
         a[len-2]='\n';
         len-=2;
   for(i=0;i<len;i++)
         printf("%c  ",a[i]);
         printf("\n");
      }
   }
   for(i=0;i<len;i++)
   {
      if(a[i+1]==')'&&a[i]!='(')
      {
         printf("false 2!");
      getch();
         return 0;
      }
      if(a[i+1]==')'&&a[i]=='(')
      {
         for(j=0;j<len-i;j++)
         a[i+j]=a[i+j+2];
         a[len-1]='\n';
         a[len-2]='\n';
         len-=2;
   for(i=0;i<len;i++)
         printf("%c  ",a[i]);
         printf("\n");
      }
   }
   for(i=0;i<len;i++)
   {
      if(a[i+1]==']'&&a[i]!='[')
      {
         printf("false 3!");
      getch();
         return 0;
      }
      if(a[i+1]==']'&&a[i]=='[')
      {
         for(j=0;j<len-i;j++)
         a[i+j]=a[i+j+2];
         a[len-1]='\n';
         a[len-2]='\n';
         len-=2;
   for(i=0;i<len;i++)
         printf("%c  ",a[i]);
         printf("\n");
      }
   }
   for(i=0;i<len;i++)
   {
      if(a[i+1]=='}'&&a[i]!='{')
      {
         printf("false 4!");
      getch();
         return 0;
      }
      if(a[i+1]=='}'&&a[i]=='{')
      {
         for(j=0;j<len-i;j++)
         a[i+j]=a[i+j+2];
         a[len-1]='\n';
         a[len-2]='\n';
         len-=2;
   for(i=0;i<len;i++)
         printf("%c  ",a[i]);
         printf("\n");
      }
2008-05-21 08:28
sanas
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-5-14
收藏
得分:0 
其实好多是测试用的。。。。
比如   for(i=0;i<len;i++)
         printf("%c  ",a[i]);
         printf("\n");
2008-05-21 08:31
lxvip1100
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-4-23
收藏
得分:0 
第二题:
#include<stdio.h>
main()
{
    unsigned int sum=0,s,n,i;
    printf("please input two number:\n");
    scanf("%d %d",&n,&s);
    for(i=1;i<n;i++)
    {

          if(n%i==0)
          sum+=n/i;
    }
    printf("sum/s=%d\n",sum/s) ;
    }
新手~
请大家给予评价。
2008-05-21 15:11
语虫
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2008-5-18
收藏
得分:0 
用栈,还是比较容易的
2008-05-21 22:54
快速回复:[讨论]第八次编程题目,谢谢大家的支持.
数据加载中...
 
   



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

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