看了12期的讲解,赶紧回来把代码写出来:
//huiwen.cpp:Definestheentrypointfortheconsoleapplication.
//

#include"stdafx.h"

voidswap(char*consts,inti,intj)

...{
chartemp;
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
intpseudo_bubble(char*consts,intlength)

...{
inti,j,k;
intodd;
charalphabet[26];
intcount=0;

for(i=0;i<length;i++)
alphabet[s[i]-'a']++;

odd=-1;
for(i=0;i<sizeof(alphabet);i++)

if(alphabet[i]%2)...{
if(odd=-1)//thefirst'odd'
odd='a'+i;
else//2odds
return-1;
}

i=0;

while(s[i]!=s[length-1-i])...{//untilthecorrespondingelementisright
j=length-1-i;
for(k=j-1;k>i&&s[k]!=s[i];k--);//findthecorrespondingelement'slocation

if(k==i)...{//findnobody->thisisthelast'odd'-closesttothecenter
swap(s,k,k+1);

}else...{

while(k<j)...{
swap(s,k,k+1);//bubbleitout
count++;
k++;
}
i++;
}
}

returncount;
}

int_tmain(intargc,_TCHAR*argv[])

...{
intx;

chars[]=...{'a','b','a','c','a','e','b','a','d','c','d'};
//{'a','b','a','c','a','b','a','d','c','d'};
//{'a','b','a','c','e','b','e','d','c','d'};
x=pseudo_bubble(s,sizeof(s));
if(x==-1)
printf("Impossible");
else
printf("%d",x);

//getchar();
return0;
}
开的VS2005写的,显得累赘。。。
找奇数次出现的元素所用的循环可以合并到后来的排序的循环里去的,不过那样,太丑。。。
刚看讲解时以为说的是选择成对字符时可以“左右开弓”?? 但做起来似乎代码很麻烦,所以干脆以左半边为准排序。
分享到:
相关推荐
9期的算法擂台栏目聚焦于“骑士聚会”问题,这是一个涉及算法设计与实现的经典挑战。这个挑战源自于数学游戏,通常与图论或组合优化相关,旨在模拟中世纪骑士在棋盘上的排列方式。 "骑士聚会"问题来源于国际象棋,...
第9期的智慧擂台题目文件,无疑是为程序员们提供了一个提升技能、检验自身技术水平的平台。这次的主题聚焦在了技术文档的编写、程序员的基本素养以及通过实际题目来锻炼和展示程序员的解决问题能力。 技术文档是...
C语言是一种广泛应用于计算机编程的结构化程序设计语言,它不仅要求程序员掌握扎实的语法知识,还要求能够编写出高质量的程序。在解决实际问题时,程序设计的质量和效率往往依赖于所采用的算法。本文将浅析C语言中...
4. **寻找最小值**:“打擂台”方法是一种简单的比较算法,通过逐个比较三个数找到最小值。这里先假设第一个数`t`是最小的,然后依次与后面两个数比较,每次将较小的数赋值给`t`,最后`t`就是最小值。 5. **寻找...
数组是存储相同类型数据的集合,本章涉及数组的排序算法,如冒泡排序、选择排序和擂台法,以及使用指针数组实现字符串排序。数组的初始化、赋值、输入输出操作,以及字符数组的处理(通过指针变量)是学习的重点。 ...
数组是【第6章】的重点,包括排序算法,如冒泡法、选择法和擂台法。数组的初始化、赋值、输入输出以及字符串处理(通过指针变量)是常见的操作。字符串作为特殊的字符数组,其处理方法和一般数组有所不同。 【第7章...