第七届蓝桥杯c/c++ C组部分题解

快速排序



排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。


其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。


这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。


下面的代码是一种实现,请分析并填写划线部分缺少的代码。




#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< 
                 
                
              
             
            
           
          
        
      
      <<" "<<<" "< 
          
            <<" "< 
           
             <<" "< 
            
              <<" "< 
             
               <<" "< 
              
                <<" "< 
               
                 <<" "< 
                <<" "< 
                  
                
               
              
             
            
          
     
     
    
    



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值