UVA 127 求一组错误的测试用例
2013-09-03 15:56
309 查看
纠结了2天,还是没发现错误用例在那里,提交即WA。
代码思路:
1.把当前所发的牌,在最后一排增加一堆。若这张牌能能被叠在左边第一堆或者第三堆,则不将添加的这堆写入记录中,否则写入
2.每次发牌后更新操作,从左往右更新。若有牌移动,则需要继续更新。
3.发完52张牌并做更新后,即输出结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#define MAX(_a,_b) ((_a>_b)? _a:_b)
#define MIN(_a,_b) ((_a>_b)? _b:_a)
#define DEBUG
typedef struct stack{
int num;
int pos[52];
}mystack;
char input[52][5];
int curPile;
mystack* pcur;
mystack* ppre;
void stackcpy(mystack* dst,const mystack* src)
{
int i;
int len = src->num;
dst->num = len;
for(i=0;i<len;i++)
dst->pos[i] = src->pos[i];
}
int update()
{
int i,j;
int headi,headj;
int numtemp,k;
for(i=0;i<curPile-1;i++)
{
headi = pcur[i].num - 1;
for(j=i+1;j<curPile;j++)
{
if((j==i+1) || (j==i+3))
{
headj = pcur[j].num - 1;
if((input[pcur[i].pos[headi]][0] == input[pcur[j].pos[headj]][0]) || (input[pcur[i].pos[headi]][1] == input[pcur[j].pos[headj]][1]))
{
pcur[i].pos[++headi] = pcur[j].pos[headj];
(pcur[i].num)++;
(pcur[j].num)--;
if((pcur[j].num)==0)
{
numtemp = 0;
ppre = pcur;
pcur = (mystack*)malloc(sizeof(mystack)*52);
if(ppre == NULL)
printf("here");
for(k=0;k<curPile;k++)
{
if(ppre[k].num)
{
stackcp
a94b
y(pcur+numtemp,ppre+k);
numtemp++;
}
}
curPile = numtemp;
free(ppre);
}
return 1;
}
}
}
}
return 0;
}
int main()
{
int i,j;
int k;
int htemp;
int dealed;
int first = 1;
int lastPile;
#ifdef DEBUG
freopen("For Uva.txt","r",stdin);
#endif
while(scanf("%s",input[0]) && input[0][0]!='#')
{
curPile = 1;
pcur = (mystack*)malloc(sizeof(mystack)*52);
pcur[0].num = 1;
pcur[0].pos[0] = 0;
for(i=1;i<52;i++)
{
scanf("%s",input[i]);
pcur[i].num = 0;
}
/** deal then update **/
for(i=1;i<52;i++)
{
dealed = 1;
lastPile = curPile;
for(j=0;j<curPile;j++)
{
if((j+3==lastPile) || (j+1==lastPile))
{
htemp = pcur[j].num-1;
if((input[i][0] == input[pcur[j].pos[htemp]][0]) || (input[i][1] == input[pcur[j].pos[htemp]][1]))
{
pcur[j].pos[++htemp] = i;
(pcur[j].num)++;
dealed = 0;
break;
}
}
}
if(dealed)
{
pcur[curPile].num = 1;
pcur[curPile].pos[0] = i;
curPile++;
}
/** update **/
while(update());
}
if(curPile>1)
printf("%d piles remaining:",curPile);
else
printf("%d pile remaining:",curPile);
for(i=0;i<curPile;i++)
printf(" %d",pcur[i].num);
free(pcur);
puts("");
}
return 0;
}
代码思路:
1.把当前所发的牌,在最后一排增加一堆。若这张牌能能被叠在左边第一堆或者第三堆,则不将添加的这堆写入记录中,否则写入
2.每次发牌后更新操作,从左往右更新。若有牌移动,则需要继续更新。
3.发完52张牌并做更新后,即输出结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#define MAX(_a,_b) ((_a>_b)? _a:_b)
#define MIN(_a,_b) ((_a>_b)? _b:_a)
#define DEBUG
typedef struct stack{
int num;
int pos[52];
}mystack;
char input[52][5];
int curPile;
mystack* pcur;
mystack* ppre;
void stackcpy(mystack* dst,const mystack* src)
{
int i;
int len = src->num;
dst->num = len;
for(i=0;i<len;i++)
dst->pos[i] = src->pos[i];
}
int update()
{
int i,j;
int headi,headj;
int numtemp,k;
for(i=0;i<curPile-1;i++)
{
headi = pcur[i].num - 1;
for(j=i+1;j<curPile;j++)
{
if((j==i+1) || (j==i+3))
{
headj = pcur[j].num - 1;
if((input[pcur[i].pos[headi]][0] == input[pcur[j].pos[headj]][0]) || (input[pcur[i].pos[headi]][1] == input[pcur[j].pos[headj]][1]))
{
pcur[i].pos[++headi] = pcur[j].pos[headj];
(pcur[i].num)++;
(pcur[j].num)--;
if((pcur[j].num)==0)
{
numtemp = 0;
ppre = pcur;
pcur = (mystack*)malloc(sizeof(mystack)*52);
if(ppre == NULL)
printf("here");
for(k=0;k<curPile;k++)
{
if(ppre[k].num)
{
stackcp
a94b
y(pcur+numtemp,ppre+k);
numtemp++;
}
}
curPile = numtemp;
free(ppre);
}
return 1;
}
}
}
}
return 0;
}
int main()
{
int i,j;
int k;
int htemp;
int dealed;
int first = 1;
int lastPile;
#ifdef DEBUG
freopen("For Uva.txt","r",stdin);
#endif
while(scanf("%s",input[0]) && input[0][0]!='#')
{
curPile = 1;
pcur = (mystack*)malloc(sizeof(mystack)*52);
pcur[0].num = 1;
pcur[0].pos[0] = 0;
for(i=1;i<52;i++)
{
scanf("%s",input[i]);
pcur[i].num = 0;
}
/** deal then update **/
for(i=1;i<52;i++)
{
dealed = 1;
lastPile = curPile;
for(j=0;j<curPile;j++)
{
if((j+3==lastPile) || (j+1==lastPile))
{
htemp = pcur[j].num-1;
if((input[i][0] == input[pcur[j].pos[htemp]][0]) || (input[i][1] == input[pcur[j].pos[htemp]][1]))
{
pcur[j].pos[++htemp] = i;
(pcur[j].num)++;
dealed = 0;
break;
}
}
}
if(dealed)
{
pcur[curPile].num = 1;
pcur[curPile].pos[0] = i;
curPile++;
}
/** update **/
while(update());
}
if(curPile>1)
printf("%d piles remaining:",curPile);
else
printf("%d pile remaining:",curPile);
for(i=0;i<curPile;i++)
printf(" %d",pcur[i].num);
free(pcur);
puts("");
}
return 0;
}
相关文章推荐
- mocha写测试用例对错误case的评估和测试
- 测试用例设计白皮书--错误推测方法
- 黑盒设计测试用例方法——等价类划分法、边界值分析法、错误推断法
- 去哪儿面试题- 一组描述由人组成的网络的测试用例校验是否联通
- UVA 127 - "Accordian" Patience---wa 了许久,错误原因见注释!
- 自动化测试中错误用例再次运行解决办法
- 黑盒测试用例设计方法&理论结合实际 -> 错误推断法
- 测试用例设计白皮书--错误推测方法
- 一种奇怪的错误,执行一个junit测试用例,代码却执行了很多遍
- 由《图解HTTP》反省的测试用例思考之错误消息toast提示
- POJ 2362 正方形 和木棒类似 但是poj一直都报错 不知道它的测试用例是什么,一直没找到错误。
- 黑盒设计测试用例方法——等价类划分法、边界值分析法、错误推断法 .
- Junit 写测试用例,老是报 Class not found 错误
- #1094 : Lost in the City(测试用例正确,但提交显示WA,求发现我程序错误)
- 黑盒测试用例设计模式-错误猜测
- gtest写了第一个测试用例错误和结算过程
- 四、测试用例设计白皮书--错误推测方法
- 测试用例顺序执行时,若上一个用例未退出iframe,下一个测试用例默认需要一次退出iframe,否则定位iframe出现错误
- mocha框架下,异步测试代码错误造成的问题----用例超时错误
- uva 401 续之 测试用例