寒假9-蓝桥杯训练

//轨道炮

寒假9-蓝桥杯训练_第1张图片

寒假9-蓝桥杯训练_第2张图片

#include
using namespace std;
#include
int logs[100010];
int main()
{
	int n;
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> logs[i];
	}
	sort(logs + 1, logs + n + 1);
	int ans = 1000000000;
	for (int i = 2;i <= n;i++)
	{
		if (logs[i] - logs[i - 1] < ans)ans = logs[i] - logs[i - 1];
	}
	int flag = 0;
	int res = 1;
	while (flag==0)
	{
		res = 1;
		for (int i = 2;i <= n;i++)
		{
			if ((logs[i] - logs[i - 1]) % ans == 0)
			{
				res += ((logs[i] - logs[i - 1]) / ans);
			}
			else
			{
				ans--;
				break;
			}
		}
		flag = 1;
	}
	cout << res << endl;
	return 0;
}

 寒假9-蓝桥杯训练_第3张图片

#include
using namespace std;
#include
int arr[30];
int main()
{
	string str;
	cin >> str;
	for (int i = 0;i < str.length();i++)
	{
		arr[int(str[i]) - 96]+=1;
	}
	int ans1=0;
	int ans2;
	for (int i = 1;i <= 26;i++)
	{
		if (arr[i] > ans1)
		{
			ans2 = i;
			ans1 = arr[i];
		}
	}
	//cout << arr[15] << endl;
	cout << char(ans2 + 96) << endl << ans1 << endl;
	return 0;
}

寒假9-蓝桥杯训练_第4张图片

//怒砍20分

#include
using namespace std;
char ch[30][30];
char chs[30][30];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
int n, m;
void dfs(int x, int y)
{
	chs[x][y] = '1';
	ch[x][y] = '0';
	for (int i = 0;i < 4;i++)
	{
		if (x + dx[i] >= 1 && y + dy[i] >= 1&& x + dx[i]<=n&& y + dy[i]<=m)
		{
			if (ch[x + dx[i]][y + dy[i]] == '1')
			{
				dfs(x + dx[i], y + dy[i]);
			}
		}
	}
}
int daan()
{
	int ans1 = 0;
	int ans2 = 0;
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			if (chs[i][j] == '1')
			{
				if (i == 1 && j == 1)ans1++;
				else if (i == 1)
				{
					if (chs[i][j - 1] == '0')ans1++;
				}
				else if (j == 1)
				{
					if (chs[i - 1][j] == '0')ans1++;
				}
				else if (chs[i - 1][j] == '0' && chs[i][j - 1] == '0')ans1++;
			}
		}
	}
	for (int i = 1;i < n;i++)
	{
		if (chs[i + 1][m] == '0'&&chs[i][m]=='1')ans2++;
	}
	for (int i = 1;i < m;i++)
	{
		if (chs[n][i+1] == '0' && chs[n][i] == '1')ans2++;
	}
	if (chs[n][m] == '1')ans2++;
	//cout << "ans1=" << ans1 << " " << "ans2=" << ans2 << endl;
	return max(ans1, ans2);
}
int main()
{
	int ans = 0;
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			cin >> ch[i][j];
		}
	}
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			if (ch[i][j]=='1')
			{
				for (int z = 1;z <= n;z++)
				{
					for (int w = 1;w <= m;w++)
					{
						chs[z][w] = '0';
					}
					
				}
				dfs(i, j);
				/*for (int z = 1;z <= n;z++)
				{
					for (int w = 1;w <= m;w++)
					{
						cout << chs[z][w];
					}
					cout << endl;
				}*/
				ans += daan();
			}
		}
	}
	cout << ans << endl;
	return 0;
}

 寒假9-蓝桥杯训练_第5张图片

#include
using namespace std;
#include
int main()
{
	string str;
	cin >> str;
	int l = str.length();
	int ans = 0;
	for (int i = 0;i < l;i++)
	{
		ans += (int(str[i] - 48));
	}
	int flag = ans;
	while ((ans / 10) != 0)
	{
		flag = 0;
		while (ans)
		{
			flag += (ans % 10);
			ans /= 10;
		}
		ans = flag;
	}
	cout << flag << endl;
	return 0;
}

寒假9-蓝桥杯训练_第6张图片

#include
using namespace std;
bool use[1000010];
int main()
{
	int n, m;
	cin >> n >> m;
	int maxx = max(n, m);
	int minn = min(n, m);
	int ans = minn-1;
	for (int i = 1;i <= n*m;i++)
	{
		if (i < minn)
		{
			use[i] = true;
			ans = i;
		}
		else
		{
			if (i % minn == 0 || i % maxx == 0)use[i] = false;
			else
			{
				if (i > maxx)
				{
					if (use[i - minn] == true && use[i - maxx] == true)
					{
						use[i] = true;
						ans = i;
					}
				}
				else if(use[i-minn])
				{
					use[i] = true;
					ans = i;
				}
			}
		}
	}
	cout << ans << endl;
	return 0;
}

 寒假9-蓝桥杯训练_第7张图片

#include
using namespace std;
int n, m;
int sum = 0;
bool use[15][15];
int arr[15][15];

int ans = 10000;

int dx[] = { 0 ,0,-1,1 };
int dy[] = { -1,1,0,0 };

void dfs(int x,int y,int  num, int d)
{
	//cout << num <<" "<< x<<" "< sum)return;
	else if (num  == sum)
	{
		if (d  < ans)ans = d ;
		return;
	}
	else if (d  >= ans)return;
	else 
	{
		use[x][y] = true;
		for (int i = 0;i < 4;i++)
		{
			if (x + dx[i] > 0 && x + dx[i] <= n && y + dy[i] > 0 && y + dy[i] <= m && use[x + dx[i]][y + dy[i]] == false)
			{
				dfs(x + dx[i], y + dy[i], num + arr[x+dx[i]][y+dy[i]], d + 1);
			}
		}
		use[x][y] = false;
	}
	return;
}
int main()
{//43
	cin >> m >> n;
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			cin >> arr[i][j];
			sum += arr[i][j];
		}
	}
	if (sum % 2 != 0)
	{
		cout << 0 << endl;
	}
	else
	{
		sum /= 2;
		dfs(1, 1, arr[1][1], 1);
		if (ans == 10000)
		{
			cout << 0 << endl;
		}
		else
		{
			cout << ans << endl;
		}
	}
	return 0;
}

寒假9-蓝桥杯训练_第8张图片

#include
using  namespace std;
#include
int n;
int ans = 0;
int arr[10];
bool use[10];
void f()
{
	//cout << 1 << endl;
	for (int i = 1;i <= 7;i++)
	{
		int flag1 = 1;
		int num1 = 0;
		while (flag1!=i+1)///1-5 1 12 123
		{
			num1 *= 10;
			num1 += arr[flag1];
			flag1++;
		}
		if (num1 >= n)break;
		for (int j = i + 1;j <= 8;j++)
		{
			int num2 = 0;
			int flag2 = i+1;
			while (flag2!=j+1)
			{
				num2 *= 10;
				num2 += arr[flag2];
				flag2++;
			}
			int num3 = 0;
			int flag3 = j+1;
			while (flag3 != 10)
			{
				num3 *= 10;
				num3 += arr[flag3];
				flag3++;
			}
			long long n1 = n * num3;
			long long n2 = num1 * num3 + num2;
			if (n1 == n2)ans++;
		}
	}
}

void dfs(int u)
{
	//cout << 2 << endl;
	if (u == 10)
	{
		f();
		return;
	}
	for (int i = 1;i <= 9;i++)
	{
		if (!use[i])
		{
			arr[u] = i;
			use[i] = true;
			dfs(u + 1);
			use[i] = false;
		}
	}
}

int main()
{
	cin >> n;
	dfs(1);
	cout << ans << endl;
	return 0;
}

//#include
//#include 
//using namespace std;
//int arr[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//int get_num_helper(int a, int b)
//{
//	int tmp = 0;
//	while (a <= b)
//	{
//		tmp *= 10;
//		tmp += arr[a];
//		a++;
//	}
//	return tmp;
//}
//void get_num(int i, int j, int& a, int& b, int& c)
//{
//	a = get_num_helper(0, i);
//	b = get_num_helper(i + 1, j);
//	c = get_num_helper(j + 1, 8);
//}
//int main()
//{
//	int n;
// 	int ans = 0;
//	cin >> n;
//	// 1.给出1~9的所有排列9!
//	do {
//		// 2.对于每个排列进行划分:划分为整数a,分母b,分子c
//		int a, b, c;
//		for (int i = 0; i < 8; i++)
//		{
//			for (int j = i + 1; j < 9; j++)
//			{
//				get_num(i, j, a, b, c);
//				if (a == 0 || b == 0 || c == 0) continue;
//				// 3.检验划分后的结果是否等于给定数字n
//				if (b % c == 0 && a + (b / c) == n) ans++;
//			}
//		}
//
//	} while (next_permutation(arr, arr + 9));
//
//	cout << ans << endl;
//
//	return 0;
//}


 寒假9-蓝桥杯训练_第9张图片

#include
using namespace std;
int main()
{
	int a, b, c;
	cin >> a >> b >> c;
	int ans = a * b * c;
	for (int i = a * b * c;i >= 1;i--)
	{
		if ( i % a == 0 && i  % b == 0 && i % c == 0)
		{
			ans = i;
		}
	}
	cout << ans << endl;
	return 0;
}

 

你可能感兴趣的:(算法,c++,数据结构)