快速排序
排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include
#include
using namespace std;
int N = 12;
//int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int a[] = {5,13,6,24,2,8,19,27,10,12,1,17};
void swap(int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
void print()
{
for(int i=0; i
x);//从右往左找,找到第一个比标尺小的数
if(i>=j) break;
swap(i,j);//将比标尺小的数移到它的左边,比标尺大的移到它的右边
print();
}
// ______________________;
swap(p,j);
return j;
}
void quicksort(int p, int r)
{
if(p
凑算式
B DEF
A + — + ——- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
#if 0
#include
#include
using namespace std;
int main()
{
int sum=0;
for(int a=1; a<10; a++)
{
for(int b=1; b<10; b++)
{
if((a-b)==0) continue;
for(int c=1; c<10; c++)
{
if((c-a)==0 || (c-b)==0) continue;
for(int d=1; d<10; d++)
{
if((d-a)==0 || (d-b)==0 || (d-c)==0) continue;
for(int e=1; e<10; e++)
{
if((e-a)==0 || (e-b)==0 || (e-c)==0 || (e-d)==0) continue;
for(int f=1; f<10; f++)
{
if((f-a)==0 || (f-b)==0 || (f-c)==0 || (f-d)==0 || (f-e)==0) continue;
for(int g=1; g<10; g++)
{
if((g-a)==0 || (g-b)==0 || (g-c)==0 || (g-d)==0 || (g-e)==0 || (g-f)==0) continue;
for(int h=1; h<10; h++)
{
if((h-a)==0 || (h-b)==0 || (h-c)==0 || (h-d)==0 || (h-e)==0 || (h-f)==0 || (h-g)==0) continue;
for(int i=1; i<10; i++)
{
if((i-a)==0 || (i-b)==0 || (i-c)==0 || (i-d)==0 || (i-e)==0 || (i-f)==0 || (i-g)==0 || (i-h)==0) continue;
// if(b%c==0 && (d*100+e*10+f)%(g*100+h*10+i)==0) 考试是这样写的,也是够傻的
int def=(d*100+e*10+f),ghi=(g*100+h*10+i);
if((b*ghi+c*def)%(c*ghi)==0)
{
int t=(b*ghi+c*def)/(c*ghi);
if(a+t==10)
{
sum++;
cout<
<<" "<<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
#include
using namespace std; int main() { int sum=0; for(int a=1; a<10; a++) { for(int b=1; b<10; b++) { if((a-b)==0) continue; for(int c=1; c<10; c++) { if((c-a)*(c-b)==0) continue; for(int d=1; d<10; d++) { if((d-a)*(d-b)*(d-c)==0) continue; for(int e=1; e<10; e++) { if((e-a)*(e-b)*(e-c)*(e-d)==0) continue; for(int f=1; f<10; f++) { if((f-a)*(f-b)*(f-c)*(f-d)*(f-e)==0) continue; for(int g=1; g<10; g++) { if((g-a)*(g-b)*(g-c)*(g-d)*(g-e)*(g-f)==0) continue; for(int h=1; h<10; h++) { if((h-a)*(h-b)*(h-c)*(h-d)*(h-e)*(h-f)*(h-g)==0) continue; for(int i=1; i<10; i++) { if((i-a)*(i-b)*(i-c)*(i-d)*(i-e)*(i-f)*(i-g)*(i-h)==0) continue; // if(b%c==0 && (d*100+e*10+f)%(g*100+h*10+i)==0) 考试是这样写的,没有好好省题啊 int def=(d*100+e*10+f),ghi=(g*100+h*10+i); if((b*ghi+c*def)%(c*ghi)==0) { int t=(b*ghi+c*def)/(c*ghi); if(a+t==10) { sum++; cout<
<<" "<<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<
<<" "<