洛谷题单
数组
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;
}