当前位置: 代码迷 >> C语言 >> [讨论]同济05级期末上机第二题
  详细解决方案

[讨论]同济05级期末上机第二题

热度:125   发布时间:2006-12-06 19:12:35.0
[IMG] [/IMG]
----------------解决方案--------------------------------------------------------
以下是引用w362034710在2006-12-6 19:12:35的发言:
[IMG] [/IMG]

什么啊
----------------解决方案--------------------------------------------------------

想截图没弄好,,,


----------------解决方案--------------------------------------------------------

你做出来了??


----------------解决方案--------------------------------------------------------

第一题 主要是边界条件的判断
#include <stdio.h>
#include <string.h>

main()
{
int n,i,j,a,b,m,d;
int t[10][10];
char r[10]="TL-BR";
char l[10]="TR-BL";
char s[10];
scanf("%d",&n);

for(d=0; d<n; d++)
{
scanf("%d x %d",&a,&b);

for(i=0; i<a; i++)
for(j=0; j<b; j++)
{
scanf("%d",&m);
t[i][j]=m;
}
scanf("%s",s);
if(strcmp(s,r)==0) // TL-BR
{ i=j=0;
printf("%d ",t[i][j]);
while(i<a && j<b)
{
if(j==b-1)
i++;
else
j++;
while(j>=0 && i<=a-1)
printf("%d ",t[i++][j--]);
j++; i--;
if(i==a-1)
j++;
else
i++;
while(i>=0 && j<=b-1)
printf("%d ",t[i--][j++]);
i++; j--;
}
printf("\n");
}
else if(strcmp(s,l)==0) // TR-BL
{
i=0; j=b-1;
printf("%d ",t[i][j]);
while(i<=a-1 && j>=0)
{
if(j==0)
i++;
else
j--;
while(j<b && i<a)
printf("%d ",t[i++][j++]);
j--; i--;
if(i==a-1)
j--;
else
i++;
while(i>=0 && j>=0)
printf("%d ",t[i--][j--]);
i++; j++;
}
printf("\n");
}
else
{ printf("error string\n"); break; }
}
}


----------------解决方案--------------------------------------------------------
第二题早就发出来了啊,,,
----------------解决方案--------------------------------------------------------
以下是引用perfect在2006-12-6 22:36:57的发言:

第一题 主要是边界条件的判断
#include <stdio.h>
#include <string.h>

main()
{
int n,i,j,a,b,m,d;
int t[10][10];
char r[10]="TL-BR";
char l[10]="TR-BL";
char s[10];
scanf("%d",&n);

for(d=0; d<n; d++)
{
scanf("%d x %d",&a,&b);

for(i=0; i<a; i++)
for(j=0; j<b; j++)
{
scanf("%d",&m);
t[i][j]=m;
}
scanf("%s",s);
if(strcmp(s,r)==0) // TL-BR
{ i=j=0;
printf("%d ",t[i][j]);
while(i<a && j<b)
{
if(j==b-1)
i++;
else
j++;
while(j>=0 && i<=a-1)
printf("%d ",t[i++][j--]);
j++; i--;
if(i==a-1)
j++;
else
i++;
while(i>=0 && j<=b-1)
printf("%d ",t[i--][j++]);
i++; j--;
}
printf("\n");
}
else if(strcmp(s,l)==0) // TR-BL
{
i=0; j=b-1;
printf("%d ",t[i][j]);
while(i<=a-1 && j>=0)
{
if(j==0)
i++;
else
j--;
while(j<b && i<a)
printf("%d ",t[i++][j++]);
j--; i--;
if(i==a-1)
j--;
else
i++;
while(i>=0 && j>=0)
printf("%d ",t[i--][j--]);
i++; j++;
}
printf("\n");
}
else
{ printf("error string\n"); break; }
}
}

输出的格式不对啊,而且没法改

----------------解决方案--------------------------------------------------------
以下是引用w362034710在2006-12-6 22:39:32的发言:
第二题早就发出来了啊,,,

无法编译
----------------解决方案--------------------------------------------------------

# include <stdio.h>
# include <string.h>
typedef struct node
{ char ch[100];
struct node *left;
struct node *right;
} BITree;
main()
{
int i=0,j=0,no[100]={0},l,n,k;char c[100][100],s[100][100];
BITree *head,*p,*q;
if(!(p=(BITree *)malloc(sizeof(BITree))));
p->left=p->right=NULL;
while(!feof(stdin))
{ head=p;
gets(c[i]);
if(i==0){strcpy(head->ch,c[i]);no[i]==0;i++;continue;}
if(c[i][0]=='*')
{n=i;i++;continue;}
if(c[i][0]=='[')
{strcpy(s[j++],&c[i][8]);i++;continue;}
if(!(q=(BITree *)malloc(sizeof(BITree))));
{
strcpy(q->ch,c[i]);
while(1)
{
if(strcmp(p->ch,c[i])<0)
if(p->left==NULL)
{ no[i]++;p->left=q;
q->left=NULL;
q->right=NULL;
break;}
else {no[i]++;p=p->left;}
if(strcmp(p->ch,c[i])>0)
if(p->right==NULL)
{ no[i]++;p->right=q;
q->left=NULL;
q->right=NULL;
break;}
else {p=p->right;no[i]++;}}}
i++;}
for(i=0;i<j;i++)
{l=1;
for(k=0;k<n;k++)
if(strcmp(s[i],c[k])==0)
{ l=0;
printf("%s-%d\n",s[i],no[k]);}
if(l)
{printf("%s-Not Found\n",s[i]);}
}}

[此贴子已经被作者于2006-12-7 10:34:17编辑过]


----------------解决方案--------------------------------------------------------
上面的是二叉树

----------------解决方案--------------------------------------------------------
  相关解决方案