本文主要是介绍程序设计大赛—文字游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
给出一组单词,判断是否可以将单词排序,使得每个单词的第一个字母和前一个单词的最后一个字母相同。
输入格式:
每一行为一整数 C ,表示测试数据的组数目。每组测试数据的第一行为整数 N ( 1<=N<=100000 ) , 接下来的 N 行,每行为一个单词,每个单词都只包含小写字母并且最多包含 1000 个字符。
输出格式:
如果不能将单词序列重组以满足要求,则输出一行“ Impossible ”,否则输出“ Possible ” .
输入样本:
3
2
ok
ok
2
ok
ko
3
Effects
Cse
Seu
输出样本:
Impossible
Possible
Possible
我的程序:
/***************************************************
程序名:文字游戏
作者:许文发
时间: 2009-11-23
***************************************************/
#include<iostream.h>
#include<string.h>
#include<stdio.h>
int first=1;// 第一次输出标志, 1 代表是, 0 代表否
// 判断整形数组 able 是否全为 1 ,是则返回 1 ,否则返回 0
int isone(int able[],int num)
{
int result=1;
for(int i=0;i<num;i++)
{
if(able[i]==0)
result=0;
}
return result;
}
// 回溯算法
void words(char start[],char end[],int able[],int prev,int num)
{
int j;
if(isone(able,num) && able[num]==0)
{
able[num]=1;
}
else
{
for(j=0;j<num;j++)
{
if(end[prev]==start[j] && able[j]==0)
{
able[j]=1;
words(start,end,able,j,num);
able[j]=0;
}
}
}
}
// 清空文件
void clearfile()
{
FILE *pt;
pt=fopen("output.txt","w");
fclose(pt);
}
// 写文件
void mywrite(int n,int first)
{
FILE *pt;
pt=fopen("output.txt","a");
if(first==1)
{
if(n==1)
fprintf(pt,"Possible");
else
fprintf(pt,"Impossible");
}
else
{
if(n==1)
fprintf(pt,"/nPossible");
else
fprintf(pt,"/nImpossible");
}
fclose(pt);
}
// 主函数
void main()
{
clearfile();
FILE *pt;
char aa[1000];
char start[100000],end[100000];
int able[100000];
int i,ii;
int total,m;
if(NULL==(pt=fopen("input.txt","r")))
{
}
else
{
fscanf(pt,"%d",&total);
for(ii=0;ii<total;ii++)
{
fscanf(pt,"%d",&m);
for(i=0;i<100000;i++)
able[i]=0;
for(i=0;i<m;i++)
{
fscanf(pt,"%s",aa);
start[i]=aa[0];
end[i]=aa[strlen(aa)-1];
}
for(i=0;i<m;i++)
{
if(able[m]==0)
{
able[i]=1;
words(start,end,able,i,m);
able[i]=0;
}
else
break;
}
mywrite(able[m],first);
first=0;
}
fclose(pt);
}
}
输入:
3
2
ok
eo
13
ege
hhs
sign
nine
edit
two
one
enn
text
th
high
sws
sst
2
ok
ok
输出:
Possible
Possible
Impossible
这篇关于程序设计大赛—文字游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!