码迷,mamicode.com
首页 > 其他好文 > 详细

NYOJ 题目915 +-字符串

时间:2017-07-29 20:27:25      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:依次   std   bsp   for   main   字符串   整数   ring   other   

题目描述:

Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题

输入
多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+ 
-++--++ 
样例输出
4

#include<stdio.h>
#include<string.h>
int main()
{
char a[5000],b[5000],ch;
while(gets(a)!=‘\0‘&&gets(b)!=‘\0‘)
{
int c,d,i,j,n=0,m=0,x=0;
c=strlen(a);
d=strlen(b);
if(c!=d)//判断二者长度是否相等 不相等输出-1 相等的话再看‘+‘(或者‘-‘)的个数是否相等
{
printf("-1\n");
continue;
}
for(i=0;i<c;i++)
if(a[i]==‘+‘)m++;
for(i=0;i<d;i++)
if(b[i]==‘+‘)x++;
if(x!=m)//‘+‘(或者‘-‘)的个数不相等,输出-1 相等的话开始计算经过几次能够完成变换
{
printf("-1\n");
continue;
}
for(i=0;i<c;i++)
{
if(a[i]==b[i])//依次判断各个对应位置上字符是否一致
continue;
for(j=i;j<c-1;j++)
{
n++;
if(a[i]==a[j+1])continue;
else
{
ch=a[i];
a[i]=a[j+1];
a[j+1]=ch;
break;
}
}
}
printf("%d\n",n);
}
return 0;
}

//AC

 

NYOJ 题目915 +-字符串

标签:依次   std   bsp   for   main   字符串   整数   ring   other   

原文地址:http://www.cnblogs.com/hys1258414454/p/7257204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!