2016蓝桥杯 自用

16年的题目

T1煤球数目

#include<bits/stdc++.h>  
using namespace std; 
//奇数:三边相等  a + (a-1) + (a-2)
//偶数:下边多一个  a + (a-1) + (a-1)
//错误,不要主观臆断,要从已知的条件找 
//正确答案:an = an-1 + n 
int ans = 1; 
int t = 1;
int main()
{
	for(int i=2; i<=100; i++)
	{
		ans = ans + i;
		t = t + ans;
		
	}
	
	printf("%d\n", t);
	
	return 0;
} 

T2生日蜡烛

#include<bits/stdc++.h>  
using namespace std;
//看到这个题目还以为跟日期相关
/*那就复习下:
	每年2月28日,
	当润年时就29,其他的月份都是大月31,小月30
	
润年怎么求?
	
1、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)

2、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)

3、对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。*/ 

//没事要记得复习怎么用Excel解题呀!!!

//回到这个题目:
//思路:就是问 x + (x+1) + (x+2) + ... +(x+n) = 326 中 x的值。 
int ans = 0;
int main()
{
	for(int x=1; x<=236; x++)
	{
		int t = x;
		ans = 0;
		while(ans<=300)
		{
			ans = ans + (t++);
			if(ans == 236)
			{
				cout << x;
				return 0;
			}
		}
	}

T3凑算式

感觉失误的地方是没用到double,
因为有的不能整除答案就会出现误差

#include<bits/stdc++.h>  
using namespace std;
int arr[9] = {1,2,3,4,5,6,7,8,9};
int ans = 0;
bool f(int arr[])
{
	double t = (double)arr[0] + (double)arr[1]/(double)arr[2] + ((double)arr[3]*100 + (double)arr[4]*10 + (double)arr[5])/((double)arr[6]*100 + (double)arr[7]*10 + (double)arr[8]);
	if(t == 10.0) return true;
	else return false;
}

int main()
{
	do
	{
		if(f(arr)) ans++;
		//printf("%d\n", f(arr));	
		//printf("%d %d %d %d %d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]);
	}while(next_permutation(arr, arr+9));
	
	cout << ans;
	return 0;
} 

T4快速排序(还是没做出来…)

#include <stdio.h>

void swap(int a[], int i, int j)
{
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

int partition(int a[], int p, int r)
{
    int i = p; //p为一开始前界限的下标 
    int j = r + 1;//j为后界限的下标 
    int x = a[p];//把第一个数字作为中间轴 
    while(1)
		{
        while(i<r && a[++i]<x);//找比第一个数大的数字,停在那里 
        while(a[--j]>x);//找一个比第一个数小的数字,并停在那里 
        if(i>=j) break;
        swap(a,i,j);
    }
    swap(a,p,j); //因为是拿 第一个数作为中间轴,偷偷的把中间轴换成右边的更小的数字 
    return j;
}

void quicksort(int a[], int p, int r)
{
    if(p<r){
        int q = partition(a,p,r);
        quicksort(a,p,q-1);
        quicksort(a,q+1,r);
    }
}

int main()
{
    int i;
    int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
    int N = 12;

    quicksort(a, 0, N-1);

    for(i=0; i<N; i++) printf("%d ", a[i]);
    printf("\n");

    return 0;
}

T5抽签

#include <stdio.h> 
#define N 6 //国家数 
#define M 5 //可以去的人数 
#define BUF 1024
//那么最终派往W星的观察团会有多少种国别的不同组合呢?6个国家, 5个人 
//										0			 5可以去的人数m    
void f(int a[], int k, int m, char b[])
{								//DFS!!!!!!!!! 
    int i,j;

    if(k==N) 									     //边界 
		{ 
        b[M] = 0;
        if(m==0) printf("%s\n",b); //输出方案 
        return;  									 //回溯 
    }

    for(i=0; i<=a[k]; i++)//选国家 
		{
        for(j=0; j<i; j++) b[M-m+j] = k+'A'; //该国家去的人数 字母存入输出数组     
        
       f(a, k+1, m-j, b);  //填空位置   
    }
}
int main()
{   
    int  a[N] = {4,2,2,1,1,3}; 	   //每个国家可以派出的最多的名额的数组 
    char b[BUF]; 									 //储存方案的字符型数组			
    f(a,0,M,b);											
    return 0;
}

T7剪邮票

有时候记得模板是好的,但是要灵活点去思考适不适合
这里我要是遍历他们是否连接在一起也只能一条路走,
要是走进子胡同我们而且把来的路堵上了就通过不了了
还有我要回溯没用啊,只是证明1是不是连在一起,
又不是看连接在一起的1组成的迷宫有几种走法。。

#include <bits/stdc++.h>
using namespace std;
//有多少种不同的剪法? 
//思路:用dfs去走路
//落脚点怎么取?
int movea[2][4] = { {1,0,-1,0}, {0,1,0,-1} }; 
int ans = 0; 
int a[12] = {0,0,0,0,0,0,0,1,1,1,1,1};	//全排列这个数组,用dfs看排列后的1是否相连 
int mapa[3][4];
bool pd()
{
	for(int i=0; i<=2; i++)
		for(int j=0; j<=3; j++)
		{
			if(mapa[i][j] == 1) return false; 
		}
		return true;
}


void dfs(int x, int y)
{
	//一个一个的遍历似乎不行,要一次向四周移动,后在判断还是否存在0 
	if(x<0 || y<0 || x>2 || y>3) return;
	if(mapa[x][y] == 0) return;
	mapa[x][y] = 0;
	
	dfs(x, y+1);
	dfs(x+1, y);
	dfs(x, y-1);
	dfs(x-1, y);
	
}
int main()
{
  
	do
	{
		int t=0;
		for(int x=0; x<=2; x++)	//把这个填入map数组中 
		{
			for(int y=0; y<=3; y++)
			{
				mapa[x][y] = a[t++];
//				printf("%d ", mapa[x][y]);
			}
		}
			int q, p;
			for(int x=0; x<=2; x++)
				for(int y=0; y<=3; y++)
					if(mapa[x][y] == 1){q = x, p = y, x=3, y=4;}
//			printf("%d %d %d %d %d %d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]);
			dfs(q, p);
			if(pd()) ans++;
		
	}while(next_permutation(a, a+12)); 
	
	printf("%d", ans);
  return 0;
}
微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值