第五周周报

洛谷题单

数组 

P5729 【深基5.例7】工艺品制作 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<stdio.h>
int main()
{
	int w,x,h,q,ans=0;
	scanf("%d%d%d", &w, &x, &h);
	scanf("%d", &q);
	int a[21][21][21] = { {{0}} };
	for (int t = 0; t < q; t++)
	{
		int x1, y1, z1, x2, y2, z2;
		scanf("%d %d %d %d %d %d", &x1, &y1, &z1, &x2, &y2, &z2);
		for (int i = x1;i<=x2; i++)
		{
			for (int j = y1; j <= y2; j++)
			{
				for (int k = z1; k <= z2; k++)
				{
					a[i][j][k] = 1;
				}
			}
		}
	}
	for (int i = 1; i <= w; i++)
	{
		for (int j = 1; j <= x; j++)
		{
			for (int k = 1; k <= h; k++)
			{
				if (a[i][j][k] == 0) { ans++; }
			}
		}
	}
	printf("%d", ans);
	return 0;
}

P2550 [AHOI2001] 彩票摇奖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

不需要进行多个数组的比较,只需要比较对应号码所在的位置是否为1

节省时间,空间;

#include<stdio.h>
int main()
{
	int n;
	scanf("%d\n", &n);
	int ans[8] = { 0 },c;
	int ins[34] = { 0 };
	for (int i = 0; i <7; i++)
	{
		scanf("%d", &c);
		ins[c] = 1;
	}
	for (int t = 0; t < n; t++)
	{
		int a=0,temp=0;
		for (int i = 0; i < 7; i++)
		{
			scanf("%d", &a);
			if (ins[a] == 1) { temp++; }
		}	
		ans[7-temp]++;
	}
	for (int i = 0; i < 7; i++)
	{
		printf("%d ", ans[i]);
	}
	return 0;
}

P2615 [NOIP2015 提高组] 神奇的幻方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重要的是弄清楚如何取“右上”,越界怎么处理

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	int a[40][40] = { {0} };
	int x = 0, y = n / 2;
	for (int i = 1; i <=n*n; i++)
	{
		a[x][y] = i;
		if (!a[(x - 1 + n) % n][(y+ 1) % n ])
		{
			x = (x - 1 + n) % n ;
			y = (y + 1) % n;
		}
		else {
			x = (x + 1) % n;
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

P5730 【深基5.例10】显示屏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

打表,非常麻烦

#include<stdio.h>
// 打表
char W[10][5][4] =
{
 {
  "XXX",
  "X.X",
  "X.X",
  "X.X",
  "XXX",
 },
 {
  "..X",
  "..X",
  "..X",
  "..X",
  "..X",
 },
 {
  "XXX",
  "..X",
  "XXX",
  "X..",
  "XXX",
 },
 {
  "XXX",
  "..X",
  "XXX",
  "..X",
  "XXX",
 },
 {
  "X.X",
  "X.X",
  "XXX",
  "..X",
  "..X",
 },
 {
  "XXX",
  "X..",
  "XXX",
  "..X",
  "XXX",
 },
 {
  "XXX",
  "X..",
  "XXX",
  "X.X",
  "XXX",
 },
 {
  "XXX",
  "..X",
  "..X",
  "..X",
  "..X",
 },
 {
  "XXX",
  "X.X",
  "XXX",
  "X.X",
  "XXX",
 },
 {
  "XXX",
  "X.X",
  "XXX",
  "..X",
  "XXX",
 }
};
int main() 
{
	int n;
	char s[110];
	scanf("%d", &n);
	scanf("%s", s, 110);
	for (int i = 0; i < 5; i++) 
	{
		for (int j = 0; j < n; j++) 
		{
			int digit = s[j] - '0';
			printf("%s", W[digit][i]);
			if (j != n - 1) printf(".");
		}
		printf("\n");
	}
	return 0;
}

P1554 梦中的统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

/和%的应用

#include<stdio.h>
int main() 
{
	int m,n;
	scanf("%d%d", &m ,&n);
	int a[10] = {0};
	for (int i = m; i <= n; i++) 
	{
		for (int q = i; q; q/=10)
		{
			a[q%10]++;
		}
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

P2141 [NOIP2014 普及组] 珠心算测验 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

不需要三重循环,使用作为标记的数组

#include<stdio.h>
int main() 
{
	int g[20005] = { 0 };
	int t[20005] = { 0 };
	int n,ans=0,max=0;
	scanf("%d", &n);
	int a[110] = {0};
	for (int i = 0; i < n; i++) 
	{
		scanf("%d", &a[i]);
		g[a[i]] = 1;
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = i+1; j < n; j++)
		{
			t[a[i] + a[j]]++;
		}
	}
	for (int i = 1; i <= 20002; i++)
	{
		if (t[i] > 0 && g[i]) ans++;
	}
	printf("%d ",ans);
	return 0;
}

P1614 爱与愁的心痛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

min要开得够大

#include<stdio.h>
int main() 
{
	int a[30500] = { 0 };
	int n,m,temp,min=3010000;
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++) 
	{
		scanf("%d", &a[i]);
	}
	for (int i = 0; i <= n-m; i++)
	{
		for (int j = 0; j < m; j++)
		{
			temp += a[i+j];
		}
		min = min < temp ? min : temp;
		temp = 0;
	}
	printf("%d ",min);
	return 0;
}

P2911 [USACO08OCT] Bovine Bones G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

暴力搜索,以及前面出现过的用数组标记频率

#include<stdio.h>
int main() 
{
	int a[90] = { 0 };
	int m,b,c;
	int max = 0,temp=0,odds=0;
	scanf("%d%d%d", &m, &b, &c);
	for (int i = 1; i <= m; i++)
	{
		for (int j = 1; j <= b; j++)
		{
			for (int k = 1; k <= c; k++)
			{
				a[i + j + k]++;
				max = max > (i + j + k) ? max : (i + j + k);
			}
		}
	}
	for (int i = 3; i <= max; i++)
	{
		if (temp < a[i]) 
		{
			temp = a[i]; 
			odds = i;
		}
	}
	printf("%d ",odds);
	return 0;
}

P1161 开灯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1,异或天选题,不需要数组

2,floor向下取整,ceil向上取整,round四舍五入

#include<stdio.h>
int main() 
{
	int t,n,temp = 0;
	double a;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%lf %d", &a, &t);
		for (int j = 1; j <= t; j++)
		{
			temp ^= (int)floor(a * j);
		}
	}
	printf("%d", temp);
	return 0;
}

3,因为没有发现第一版(异或)把j写成了i而WA了一小时怒而重写的数组版代码

超过20M的数组要开在全局

#include<stdio.h>
#include<math.h>
int an[500000] = { 0 };
int main() 
{
	int t,n;
	double a;
	scanf("%d", &n);
	while(n--)
	{
		scanf("%lf %d", &a, &t);
		for (int j = 1; j <= t; j++)
		{
			if (an[(int)(a * j)] == 0) 
			{an[(int)(a * j)] = 1;}
			else { an[(int)(a * j)] = 0; }
		}
	}
	for (int i = 1; ; i++)
	{
		if (an[i] == 1)
		{ 
		    printf("%d", i); 
			break;
		}
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值