洛谷-【入门4】数组

2023-11-18

1.小鱼比可爱

题目描述

人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

输入格式

第一行输入一个正整数n,表示鱼的数目。

第二行内输入 n个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 ai。

输出格式

一行,输出 n 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

#include <stdio.h>
int main(){
	int n,a[100];
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		getchar();
		int count=0;
		for(int j=0;j<i;j++){
			if(a[j]<a[i])count++;
		}
		printf("%d ",count);
	}
	return 0;
}

样例输入 #1

6
4 3 0 5 1 2

样例输出 #1

0 0 0 3 1 2

提示

对于 100%的数据,1 <=n<=100,0 <=ai <=10。

2.小鱼的数字游戏

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字ai(长度不一定,以 0结束),记住了然后反着念出来(表示结束的数字0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以0结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

#include <stdio.h>
int main(){
	int a[100]={1},i=-1;
	do{
		i++;
		scanf("%d",&a[i]);
		getchar();
	}while(a[i]!=0);
	for(int j=i-1;j>=0;j--){
		printf("%d ",a[j]);
	}
	return 0;
}

样例输入 #1

3 65 23 5 34 1 30 0

样例输出 #1

30 1 34 5 23 65 3

提示

对于100% 的数据,保证 0 <= ai <= 2^{31} - 1,数字个数不超过 100。

3.冰雹猜想

题目描述

给出一个正整数 n,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以2。经过若干次循环后,最终都会回到1。经过验证很大的数字(7*10^{11})都可以按照这样的方式比变成1,所以被称为“冰雹猜想”。例如当n 是 20,变化的过程是20->10->5->16->8-> 4-> 2-> 1 。

根据给定的数字,验证这个猜想,并从最后的 1开始,倒序输出整个变化序列。

输入格式

输入一个正整数 n。

输出格式

输出若干个由空格隔开的正整数,表示从最后的1 开始倒序的变化数列。

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

样例输入 #1

20

样例输出 #1

1 2 4 8 16 5 10 20

提示

数据保证,1 <= n<=100。

4.校门外的树

题目描述

某校大门外长度为1 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0的位置,另一端在1 的位置;数轴上的每个整数点,即 0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入格式

第一行有两个整数,分别表示马路的长度1 和区域的数目 m。

接下来m 行,每行两个整数 u, v,表示一个区域的起始点和终止点的坐标。

输出格式

输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。

#include <stdio.h>
int main(){
	int l,m,u,v,flag[10010]={0};
	scanf("%d %d",&l,&m);
	l+=1;
	for(int i=0;i<m;i++){
		scanf("%d %d",&u,&v);
		for(int j=u;j<=v;j++){
			if(flag[j]==0){
				flag[j]=1;
				l--;
			}
		}
		
	}
	printf("%d",l);
	return 0;
}

样例输入 #1

500 3
150 300
100 200
470 471

样例输出 #1

298

提示

对于100% 的数据,保证 1 <= l <= 10^4,1 <= m <= 100,0 <= u <= v <= l。

5.旗鼓相当的对手

题目描述

现有N名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 150 的自然数)。如果某对学生<i,j>的每一科成绩的分差都不大于5,且总分分差不大于10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。

输入格式

第一行一个正整数N。

接下来N行,每行三个整数,其中第i行表示第i名同学的语文、数学、英语成绩。最先读入的同学编号为 1。

输出格式

输出一个整数,表示“旗鼓相当的对手”的对数。

#include <stdio.h>
#include <math.h>
int main(){
	int n,score[1000][4],i,j,count=0;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		int all=0;
		for(j=0;j<3;j++){
			scanf("%d",&score[i][j]);
			all+=score[i][j];			//算出三门成绩的总分
		}
		score[i][j]=all;
	}
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			for(int k=0;k<3;k++){	//3门成绩+1总分 比较
				if(abs(score[i][k]-score[j][k])>5||abs(score[i][3]-score[j][3])>10)break;
				if(k==2)count++;
			}
		}
	}
	printf("%d",count);
	return 0;
}

样例输入 #1

3
90 90 90
85 95 90
80 100 91

样例输出 #1

2

提示

数据保证,2<=N<=1000且每科成绩为不超过 150的自然数。

6.工艺品制作

题目描述

现有一个长宽高分别为w,x,h组成的实心玻璃立方体,可以认为是由1×1×1的数个小方块组成的,每个小方块都有一个坐标 ( i,j,k )。现在需要进行q次切割。每次切割给出(x1,y1,z1),(x2,y2,z2)这 6 个参数,保证x1<=x2,y1<=y2,z1<=z2;每次切割时,使用激光工具切出一个立方体空洞,空洞的壁平行于立方体的面,空洞的对角点就是给出的切割参数的两个点。

换句话说,所有满足 x1<=i<=x2,y1<=j <=y2,z1<=k<=z2的小方块(i,j,k)的点都会被激光蒸发。例如有一个 4×4×4的大方块,其体积为64;给出参数(1,1,1),(2,2,2)时,中间的8块小方块就会被蒸发,剩下56个小方块。现在想知道经过所有切割操作后,剩下的工艺品还剩下多少格小方块的体积?

输入格式

第一行三个正整数w,x,h。

第二行一个正整数q。

接下来q行,每行六个c整数(x1,y1,z1),(x2,y2,z2)。

输出格式

输出一个整数表示答案。

#include <stdio.h>
int main(){
	int w,x,h,count=0,flag[21][21][21]={0};
	scanf("%d %d %d",&w,&x,&h);
	int q;
	scanf("%d",&q);
	while(q--){			//每一次切割
		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++){			//坐标i,j,k
					if(flag[i][j][k]==0){
						count++;				//标记被切掉的方块
						flag[i][j][k]=1;
					}
				}
			}
		}
	}
	printf("%d",w*x*h-count);				//得出没被切掉的方块
	return 0;
}

样例输入 #1

4 4 4
1
1 1 1 2 2 2

样例输出 #1

56

提示

数据保证,1<=w,x,h<=20,1<=q<=100。1<=x1<=x2<=w,1<=y1<=y2<=x,1<=z1<=z2<=h。

7.彩票摇奖

题目描述

为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:

1.每张彩票上印有7个各不相同的号码,且这些号码的取值范围为1 sim33。
2.每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
3.共设置7个奖项,特等奖和一等奖至六等奖。

兑奖规则如下:
特等奖:要求彩票上7个号码都出现在中奖号码中。
一等奖:要求彩票上有6个号码出现在中奖号码中。
二等奖:要求彩票上有5个号码出现在中奖号码中。
三等奖:要求彩票上有4个号码出现在中奖号码中。
四等奖:要求彩票上有3个号码出现在中奖号码中。
五等奖:要求彩票上有2个号码出现在中奖号码中。
六等奖:要求彩票上有1个号码出现在中奖号码中。

注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖号码为23、31、1、14、19、17、18,则彩票12、8、9、23、1 、16、7由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。

现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。

输入格式

输入的第一行只有一个自然数n,表示小明买的彩票张数;

第二行存放了7个介于1和33之间的自然数,表示中奖号码;

在随后的n行中每行都有7个介于1和33之间的自然数,分别表示小明所买的n张彩票。

输出格式

依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。

#include <stdio.h>
int main(){
	int n,z[7],cp[1000][7],result[7]={0};
	scanf("%d",&n);
	for(int i=0;i<7;i++){
		scanf("%d",&z[i]);
		getchar();
	}
	for(int i=0;i<n;i++){					//每张彩票
		int count=0;
		for(int j=0;j<7;j++){				//每个号码
			scanf("%d",&cp[i][j]);
			getchar();
			for(int t=0;t<7;t++){			//每个号码与中奖号码比对
				if(z[t]==cp[i][j])count++;
			}
		}
		switch (count) {					//每张彩票有几个中了
		case 1:
			result[6]++;
			break;
		case 2:
			result[5]++;
			break;
		case 3:
			result[4]++;	
			break;
		case 4:
			result[3]++;
			break;
		case 5:
			result[2]++;
			break;
		case 6:
			result[1]++;
			break;
		case 7:
			result[0]++;
			break;
		}
	}
	for(int i=0;i<7;i++){
		printf("%d ",result[i]);
	}
	
	return 0;
}

样例输入#1

2
23 31 1 14 19 17 18
12 8 9 23 1 16 7
11 7 10 21 2 9 31

样例输出#1

0 0 0 0 0 1 1

提示

对于100%的数据,保证1<=n<=1000。

8.神奇的幻方

题目描述

幻方是一种很神奇的N×N矩阵:它由数字1,2,3,……,N×N构成,且每行、每列及两条对角线上的数字之和都相同。

当N为奇数时,我们可以通过下方法构建一个幻方:

首先将1写在第一行的中间。

之后,按如下方式从小到大依次填写每个数K(K=2,3,……,N×N):

  1. 若(K-1)在第一行但不在最后一列,则将K填在最后一行,(K-1)所在列的右一列;
  2. 若(K-1)在最后一列但不在第一行,则将K填在第一列,(K-1)所在行的上一行;
  3. 若(K-1)在第一行最后一列,则将K填在(K-1)的正下方;
  4. 若(K-1)既不在第一行,也不在最后一列,如果(K-1)的右上方还未填数,则将K填在(K-1)的右上方,否则将K填在(K-1)的正下方。

现给定N,请按上述方法构造N×N的幻方。

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

输入格式

一个正整数N,即幻方的大小。

输出格式

共N行,每行N个整数,即按上述方法构造出的N×N的幻方,相邻两个整数之间用单空格隔开。


样例输入 #1

3

样例输出 #1

8 1 6
3 5 7
4 9 2

样例输入 #2

25

样例输出 #2

327 354 381 408 435 462 489 516 543 570 597 624 1 28 55 82 109 136 163 190 217 244 271 298 325
353 380 407 434 461 488 515 542 569 596 623 25 27 54 81 108 135 162 189 216 243 270 297 324 326
379 406 433 460 487 514 541 568 595 622 24 26 53 80 107 134 161 188 215 242 269 296 323 350 352
405 432 459 486 513 540 567 594 621 23 50 52 79 106 133 160 187 214 241 268 295 322 349 351 378
431 458 485 512 539 566 593 620 22 49 51 78 105 132 159 186 213 240 267 294 321 348 375 377 404
457 484 511 538 565 592 619 21 48 75 77 104 131 158 185 212 239 266 293 320 347 374 376 403 430
483 510 537 564 591 618 20 47 74 76 103 130 157 184 211 238 265 292 319 346 373 400 402 429 456
509 536 563 590 617 19 46 73 100 102 129 156 183 210 237 264 291 318 345 372 399 401 428 455 482
535 562 589 616 18 45 72 99 101 128 155 182 209 236 263 290 317 344 371 398 425 427 454 481 508
561 588 615 17 44 71 98 125 127 154 181 208 235 262 289 316 343 370 397 424 426 453 480 507 534
587 614 16 43 70 97 124 126 153 180 207 234 261 288 315 342 369 396 423 450 452 479 506 533 560
613 15 42 69 96 123 150 152 179 206 233 260 287 314 341 368 395 422 449 451 478 505 532 559 586
14 41 68 95 122 149 151 178 205 232 259 286 313 340 367 394 421 448 475 477 504 531 558 585 612
40 67 94 121 148 175 177 204 231 258 285 312 339 366 393 420 447 474 476 503 530 557 584 611 13
66 93 120 147 174 176 203 230 257 284 311 338 365 392 419 446 473 500 502 529 556 583 610 12 39
92 119 146 173 200 202 229 256 283 310 337 364 391 418 445 472 499 501 528 555 582 609 11 38 65
118 145 172 199 201 228 255 282 309 336 363 390 417 444 471 498 525 527 554 581 608 10 37 64 91
144 171 198 225 227 254 281 308 335 362 389 416 443 470 497 524 526 553 580 607 9 36 63 90 117
170 197 224 226 253 280 307 334 361 388 415 442 469 496 523 550 552 579 606 8 35 62 89 116 143
196 223 250 252 279 306 333 360 387 414 441 468 495 522 549 551 578 605 7 34 61 88 115 142 169
222 249 251 278 305 332 359 386 413 440 467 494 521 548 575 577 604 6 33 60 87 114 141 168 195
248 275 277 304 331 358 385 412 439 466 493 520 547 574 576 603 5 32 59 86 113 140 167 194 221
274 276 303 330 357 384 411 438 465 492 519 546 573 600 602 4 31 58 85 112 139 166 193 220 247
300 302 329 356 383 410 437 464 491 518 545 572 599 601 3 30 57 84 111 138 165 192 219 246 273
301 328 355 382 409 436 463 490 517 544 571 598 625 2 29 56 83 110 137 164 191 218 245 272 299

提示

对于100%的数据,对于全部数据,1<=N<=39且N为奇数。

9.显示屏

题目描述

液晶屏上,每个阿拉伯数字都是可以显示成3×5的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。

输入格式

第一行输入一个正整数n,表示数字的位数。

第二行输入一个长度为n的自然数。

输出格式

输出五行,表示显示屏上的数字。

#include <stdio.h>
int main(){
	char num1[10][4]={"XXX","..X","XXX","XXX","X.X","XXX","XXX","XXX","XXX","XXX"};
	char num2[10][4]={"X.X","..X","..X","..X","X.X","X..","X..","..X","X.X","X.X"};
	char num3[10][4]={"X.X","..X","XXX","XXX","XXX","XXX","XXX","..X","XXX","XXX"};
	char num4[10][4]={"X.X","..X","X..","..X","..X","..X","X.X","..X","X.X","..X"};
	char num5[10][4]={"XXX","..X","XXX","XXX","..X","XXX","XXX","..X","XXX","XXX"};
	
	int n;
	char num[101];
	scanf("%d",&n);
	scanf("%s",num);
	for(int i=1;i<=5;i++){
		for(int j=0;j<n;j++){
			switch (i) {
			case 1:
				printf("%s",num1[num[j]-'0']);
				break;
			case 2:
				printf("%s",num2[num[j]-'0']);
				break;
			case 3:
				printf("%s",num3[num[j]-'0']);
				break;
			case 4:
				printf("%s",num4[num[j]-'0']);
				break;
			case 5:
				printf("%s",num5[num[j]-'0']);
				break;
			}
			if(j<n-1)printf(".");
		}
		printf("\n");
	}
	return 0;
}

样例输入 #1

10
0123456789

样例输出 #1

XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX
X.X...X...X...X.X.X.X...X.....X.X.X.X.X
X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX
X.X...X.X.....X...X...X.X.X...X.X.X...X
XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX

提示

数据保证,1<=n<=100

10.梦中的统计

题目背景

Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。

题目描述

Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0……9):每一个数码在计数的过程中出现过多少次?

给出两个整数M和N,求在序列[M, M + 1, M + 2, ……, N - 1, N]中每一个数码出现了多少次。

输入格式

第1行: 两个用空格分开的整数M和N。

输出格式

第1行: 十个用空格分开的整数,分别表示数码0……9在序列中出现的次数。

#include <stdio.h>
int main(){
	int M,N,num[10]={0};
	scanf("%d %d",&M,&N);
	for(int i=M;i<=N;i++){
		int temp=i;
		while(temp>0){
			num[temp%10]++;
			temp/=10;
		}
	}
	for(int i=0;i<10;i++){
		printf("%d ",num[i]);
	}
	return 0;
}

样例输入 #1

129 137

样例输出 #1

1 10 2 9 1 1 1 1 0 1

提示

数据保证,1<=M<=N<=2*109,N-M<=5*105

11.珠心算测验

题目描述

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

最近老师出了一些测验题,请你帮忙求出答案。

输入格式

共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。

第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

输出格式

一个整数,表示测验题答案。

#include <stdio.h>
int main(){
	int n,a[100],count=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		getchar();
	}
	for(int i=0;i<n-1;i++){				//降序排序
		for(int j=i+1;j<n;j++){
			if(a[i]<a[j]){
				int temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	for(int i=0;i<n-2;i++){
		for(int j=i+1,k=n-1;j<n&&k>0&&j!=k;){
			if(a[j]+a[k]>a[i])j++;
			else if(a[j]+a[k]<a[i])k--;	
			else{
				count++;
//				printf("%d + %d = %d\n",a[j],a[k],a[i]);
				break;
			}
		}
	}
	printf("%d",count);
	return 0;
}

样例输入 #1

4
1 2 3 4

样例输出 #1

2

提示

【样例说明】

由1+2=3,1+3=4,故满足测试要求的答案为2。

注意,加数和被加数必须是集合中的两个不同的数。

【数据说明】

对于100%的数据,3<=n<=100,测验题给出的正整数大小不超过10,000。

12.爱与愁的心痛

题目描述

最近有n个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续m个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

输入格式

第一行有两个用空格隔开的整数,分别代表n和m。

第2到第(n + 1)行,每行一个整数,第(i + 1)行的整数ai代表第i件事的刺痛值ai。

输出格式

输出一行一个整数,表示连续m个刺痛值的和的最小值是多少。

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

样例输入 #1

8 3
1
4
7
3
1
2
4
3

样例输出 #1

6

提示

  • 对于100%的数据,保证0<=m<=n<=3*10^3,1<=ai<=100。

13.Bovine Bones G

题目描述

贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为s1,s2,s3。

对于一个有S个面的骰子每个面上的数字是1,2,3,……,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。

现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。

数据范围:2<=s1<=20,2<=s2<=20,2<=s3<=40。

输入格式

* Line 1: Three space-separated integers: S1, S2, and S3

输出格式

* Line 1: The smallest integer sum that appears most frequently when the dice are rolled in every possible combination.

#include <stdio.h>
int main(){
	int s1,s2,s3,a[80]={0},sum=0,max=0,t;
	scanf("%d %d %d",&s1,&s2,&s3);
	for(int i=1;i<=s1;i++){
		for(int j=1;j<=s2;j++){
			for(int k=1;k<=s3;k++){
				sum=0;
				sum=i+j+k;
				a[sum]++;
				if(a[sum]>max){
					max=a[sum];
					t=sum;
				}
			}
		}
	}
	printf("%d",t);
	return 0;
}

样例输入 #1

3 2 3

样例输出 #1

5

提示

Here are all the possible outcomes.

1 1 1 -> 3  
1 2 1 -> 4  
2 1 1 -> 4  
2 2 1 -> 5  
3 1 1 -> 5  
3 2 1 -> 6 
1 1 2 -> 4  
1 2 2 -> 5  
2 1 2 -> 5  
2 2 2 -> 6  
3 1 2 -> 6  
3 2 2 -> 7 
1 1 3 -> 5  
1 2 3 -> 6  
2 1 3 -> 6  
2 2 3 -> 7  
3 1 3 -> 7  
3 2 3 -> 8

Both 5 and 6 appear most frequently (five times each), so 5 is the answer.

14.开灯

题目描述

在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,……。

每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。

在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:

指定两个数,a,t(a为实数,t为正整数)。将编号为⌊a⌋,⌊2×a⌋,⌊3×a⌋,…,⌊t×a⌋ r的灯的开关各按一次。其中 ⌊k⌋表示实数k的整数部分。

在小明进行了n次操作后,小明突然发现,这个时候只有一盏灯是开的,小明很想知道这盏灯的编号,可是这盏灯离小明太远了,小明看不清编号是多少。

幸好,小明还记得之前的n次操作。于是小明找到了你,你能帮他计算出这盏开着的灯的编号吗?

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

输入格式

第一行一个正整数n,表示n次操作。

接下来有n行,每行两个数,ai,ti。其中ai是实数,小数点后一定有6位,ti是正整数。

输出格式

仅一个正整数,那盏开着的灯的编号。

样例输入 #1

3
1.618034 13
2.618034 7
1.000000 21

样例输出 #1

20

提示

记T= t1+t2+t3+……+tn。

对于100%的数据,满足n<=5000,1<= ai<1000,1 <= ti <= T。

数据保证,在经过n次操作后,有且只有一盏灯是开的,不必判错。而且对于所有的i来说,ti*ai的最大值不超过2000000。

15.蛇形方阵

题目描述

给出一个不大于9的正整数n,输出n*n 的蛇形方阵。

从左上角填上1开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用3个字符,前面使用空格补齐。

输入格式

输入一个正整数n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

#include <stdio.h>
int main(){
	int n,a[10][10]={0},i,j,t=1;
	scanf("%d",&n);
	int m=n,temp=n;
	for(int x=1;m>0&&n>0;x++){
		i=x,j=x;
		for(int temp1=1;temp1<=n;temp1++){
			a[i][j++]=t++;
		}
		m--,j--,i++;
		for(int temp2=1;temp2<=m;temp2++){
			a[i++][j]=t++;
		}
		n--,i--,j--;
		for(int temp1=1;temp1<=n;temp1++){
			a[i][j--]=t++;
		}
		m--,i--,j++;
		for(int temp2=1;temp2<=m;temp2++){
			a[i--][j]=t++;
		}
		n--;
	}
	
	for(int i=1;i<=temp;i++){
		for(int j=1;j<=temp;j++){
			printf("%3d",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

样例输入 #1

4

样例输出 #1

 1  2  3  4
12 13 14  5
11 16 15  6
10  9  8  7

提示

数据保证,1<=n<=9。

16.杨辉三角

题目描述

给出n(n<=20),输出杨辉三角的前n行。

如果你不知道什么是杨辉三角,可以观察样例找找规律

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

样例输入 #1

6

样例输出 #1

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

17.插火把

题目描述

话说有一天 linyorson 在“我的世界”开了一个n*n的方阵,现在他有m个火把和k个萤石,分别放在(x1, y1) ~ (xm, ym)和 (o1, p1)~(ok, pk)的位置,没有光并且没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?

P.S. 火把的照亮范围是:

    ||||||
    ||||||
    |||火把|||
    ||||||
    ||||||

萤石:

    ||||||
    ||||||
    |||萤石|||
    ||||||
    ||||||

输入格式

输入共m + k + 1行。
第一行为 n, m, k。
第2到第m + 1行分别是火把的位置xi, yi.
第m + 2到第m + k + 1行分别是萤石的位置 oi, pi。
注:可能没有萤石,但一定有火把。

输出格式

有几个点会生出怪物。

#include <stdio.h>
int main(){
	int n,m,k,a_n[101][101]={0},x1,y1,x2,y2;
	scanf("%d %d %d",&n,&m,&k);
	for(int i=0;i<m;i++){
		scanf("%d %d",&x1,&y1);
		a_n[x1][y1]=1;			//火把位置
		for(int j=1;j<=n;j++){
			for(int t=1;t<=n;t++){
				if(j>=x1-2&&t>=y1-2&&j<=x1+2&&t<=y1+2&&a_n[j][t]==0){
					if((j<x1-1&&(t<y1||t>y1))||(j>x1+1&&(t<y1||t>y1))||(j==x1-1&&(t==y1-2||t==y1+2))||(j==x1+1&&(t==y1-2||t==y1+2)));
					else a_n[j][t]=1;
				}
			}
		}
	}
	for(int i=0;i<k;i++){
		scanf("%d %d",&x2,&y2);
		a_n[x2][y2]=1;			//萤石位置
		for(int j=1;j<=n;j++){
			for(int t=1;t<=n;t++){
				if(j>=x2-2&&t>=y2-2&&j<=x2+2&&t<=y2+2&&a_n[j][t]==0)a_n[j][t]=1;
			}
		}
	}
	int count=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a_n[i][j]==0)count++;	
		}
	}
	printf("%d",count);
	return 0;
}

样例输入 #1

5 1 0
3 3

样例输出 #1

12

提示

数据保证,1<=n<=100,1<=m+k<=25,1<=m<=25,0<=k<=5。

18.压缩技术

题目描述

设某汉字由N*N的0和1的点阵图案组成。

我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推……

例如: 以下汉字点阵图案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111

对应的压缩码是:{7 3 1 6 1 6 4 3 1 6 1 6 1 3 7}(第一个数是N,其余各位表示交替表示0和1的个数,压缩码保证N*N=交替的各位数之和)

输入格式

数据输入一行,由空格隔开的若干个整数,表示压缩码。

输出格式

表示最后的汉字点阵图(点阵符号之间不留空格)。

#include <stdio.h>
#include <string.h>
int main(){
	int n;
	scanf("%d",&n);
	int num,i=0,flag=1;
	do{
		scanf(" %d",&num);
		flag=!flag;
		while(num!=0){
			printf("%d",flag);
			if(++i%n==0)printf("\n");
			num--;
		}
	}while(i<n*n);
	return 0;
}

样例输入 #1

7 3 1 6 1 6 4 3 1 6 1 6 1 3 7

样例输出 #1

0001000
0001000
0001111
0001000
0001000
0001000
1111111

提示

数据保证,3<=N<=200。

19.压缩技术(续集版)

题目描述

设某汉字由N*N的0和1的点阵图案组成。

我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推……

例如: 以下汉字点阵图案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111

对应的压缩码是:{7 3 1 6 1 6 4 3 1 6 1 6 1 3 7}(第一个数是N,其余各位表示交替表示0和1的个数,压缩码保证N*N=交替的各位数之和)

输入格式

汉字点阵图(点阵符号之间不留空格)。

输出格式

输出一行,压缩码。

#include <stdio.h>
int main(){
	char str[200][201];
	int i=0,j,count=0,flag=0;
	while(scanf("%s",str[i++])!=EOF){}
	int n=i-1;
	printf("%d ",n);
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(flag==0){
				if(str[i][j]=='0'){
					count++;
				}else{
					printf("%d ",count);
					count=1;
					flag=1;
				}
			}else{
				if(str[i][j]=='1'){
					count++;
				}else{
					printf("%d ",count);
					count=1;
					flag=0;
				}
			}
		}
	}
	printf("%d",count);
	return 0;
}

样例输入 #1

0001000
0001000
0001111
0001000
0001000
0001000
1111111

样例输出 #1

7 3 1 6 1 6 4 3 1 6 1 6 1 3 7

提示

数据保证,3<=N<=200。

20.方块转换 Transformations

题目描述

一块n*n正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

转90°:图案按顺时针转90°。

转180°:图案按顺时针转180°。

转270°:图案按顺时针转270°。

反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。

组合:图案在水平方向翻转,然后再按照1~3之间的一种再次转换。

不改变:原图案不改变。

无效转换:无法用以上方法得到新图案。

如果有多种可用的转换方法,请选择序号最小的那个。

只使用上述7个中的一个步骤来完成这次转换。

输入格式

第一行一个正整数n。

然后n行,每行n个字符,全部为 @-,表示初始的正方形。

接下来n行,每行n个字符,全部为 @-,表示最终的正方形。

输出格式

单独的一行包括1~7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。


样例输入 #1

3
@-@
---
@@-
@-@
@--
--@

样例输出 #1

1

提示

对于100%的数据,1<=n<=10。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洛谷-【入门4】数组 的相关文章

随机推荐

  • Java毕设项目二手交易市场整站源码 校园转转二手市场源码

    本篇为大家带来的是Java开源项目 校园二手交易平台 可以用来做实战演练 也可以用来做毕业设计 校园转转二手市场源码分享 Java写的应用 改成本毕设啥还是挺不错的 mybatis plus 和 Hibernate随心用 基于 Java 开
  • Android 更新UI方法的深度解析

    1 Handler public class SecondActivity extends Activity private static final int MSG WHAT 101 TextView tv Button btn priv
  • Unity 制作动画 - Animation 的使用

    1 unity 顶部导航栏点击 Window gt Animation 打开 Animation 窗口 通过这个窗口可以创建 编辑动画 也可以查看导入的动画 Animation 窗口同一时间只能查看 编辑同一段Clip中的动画 2 选中 H
  • MySQL的auto_increment使用

    说明 总结自 mysql技术内幕 第5版 创建auto increment列要遵循如下规则 每个表只能有一个列具有auto increment属性 且必须为整数数据类型 当然 也支持浮点类型 但强烈不建议 该列必须建立索引 最常见的就是使用
  • 2014年3月8日星期六(DEMO8-5恒定着色)

    恒定着色是在多边形由一种材质构成 多边形的每个点的面法线都相同 因此 只需对一个顶点的像素的光照情况对整个多边形进行着色 对于平面组成的物体 是可行的 但是如果对曲面组成的物体 会导致物体看起来由多边形组成 在16位着色下 光照步骤为 1
  • 【漏洞复现】利用禅道系统RCE命令执行漏洞反弹shell

    0x00 漏洞爆出来已经有些日子了 今天实测了一下 记录一下测试过程 0x01 影响范围 开源版 17 4 lt 禅道 lt 18 0 beta1 旗舰版 v3 4 lt 禅道 lt v4 0 beta1 企业版 v7 4 lt 禅道 lt
  • H2,Derby,HSQL内存数据库体验

    前一段时间接触了下spring支持的3种嵌入式数据库 希望能替代mysql 结果不太理想 记录一下 1 使用背景 小组希望有独立的单测数据库 这样能保证测试数据的稳定性 本身项目用spring 优先选择spring自带的3个嵌入式数据库 2
  • read tcp 192.168.0.106:56298->185.199.111.153:80: wsarecv: An existing connection was forcibly close

    解决 read tcp 192 168 0 106 56298 gt 185 199 111 153 80 wsarecv An existing connection was forcibly close 问题 问题描述 问题原因 解决办
  • pytest自带测试报告修改与汉化

    话不多说 大家直接看这篇文章吧 我也是根据这篇文章调整的 这篇算是详细 详尽的了 转载链接地址 https www cnblogs com linuxchao p linuxchao pytest html html 最后的汉化插件我没有用
  • python控制系统操作-控制text文本内容的选取与输出

    python控制系统操作 控制text文本内容的选取与输出 1 首先我们查看一下简单文本的内容 txt T QWE GGG Sat AbsoluteDlg cpp 777 m Progress gt Get gt Set RRC T QWE
  • JVM的构成 (类加载子系统、执行引擎、运行时数据区)

    目录 JVM由三部分组成 1 类加载子系统 可以根据指定的全限定名来载入类或接口 Java类加载机制 trigger333的博客 CSDN博客 java类加载的机制 2 执行引擎 负责执行那些包含在被载入类的方法中的指令 3 运行时数据区
  • 刷脸支付技术对接可以代理可以贴牌

    购物付款时 不用打开手机 只是看一眼支付设备 就能完成付款 今年以来 刷脸支付在大小商店 餐馆逐渐铺开 消费者和商家在感到新鲜 好奇的同时也发现 这一设备利用率较低 体验也没有二维码支付好 此外还存在个人信息泄露的风险 刷脸支付未来如何 市
  • cpu是几核的怎么查看

    文章目录 一 Windows下 二 Linux下 一 Windows下 通过任务管理器查看 windows下任务管理器的打开方式较多 比如 Win x 选择任务管理器 T Win R 输入taskmgr并点击回车键 打开任务管理器 Ctrl
  • DC-DC自举电容(BOOT)几个问题

    在BUCK电路中 经常会看到一个电容连接在芯片的SW和boot管脚之间 这个电容称之为自举电容 关于这个电容 有以下几个问题 自举电容有什么用 以MPS的buck芯片MP1484为例 规格书中芯片的BS管脚说明如下 在BS和SW之间接一个0
  • 51单片机C语言跑马灯,51单片机上实现控制跑马灯

    在MCS一51单片机的控制系统中 它的四个并行8位输入输出端口P0一P3是我们经常使用的 在并行端口的编程学习中 跑马灯 是单片机并行端口输出控制的典型实例 所谓跑马灯 是指将八个发光二极管分别连接到单片机的某一并行端口的八根线上 通过编程
  • wordpress 4.6 RCE漏洞利用(CVE-2016-10033)

    一 漏洞描述 当WordPress 使用 PHPMailer 组件向用户发送邮件 攻击者在找回密码时会使用PHPmailer发送重置密码的邮件 利用substr 字符串截取函数 run 系统调用函数 等构造payload 即可进行远程命令执
  • 区块链:Solidity值类型(布尔Boolens&整型Integer)

    Solidity Types 布尔 Booleans bool 可能的取值为常量值true和false 支持的运算符 逻辑非 逻辑与 逻辑或 等于 不等于 备注 运算符 和 是短路运算符 如f x g y 当f x 为真时 则不会继续执行g
  • HTTP请求返回状态码

    消息 代表请求已被接收 需要继续处理 临时响应 100 Continue 告知客户部分响应已被服务器接收 客户端应继续发送请求 成功 服务器已经接收理解并接受请求 200 OK 请求成功 返回想要的数据 正常状态 201 Created 已
  • 软件测试方法汇总

    软件测试方法种类繁多 记忆起来混乱 如果把软件测试方法进行分类 就会清晰很多 我参考一些书籍和网上的资料 把常用的软件测试方法列出来 让大家对软件测试行业有个总体的看法 从测试设计方法分类 测试名称 测试内容 Black box黑盒测试 把
  • 洛谷-【入门4】数组

    1 小鱼比可爱 题目描述 人比人 气死人 鱼比鱼 难死鱼 小鱼最近参加了一个 比可爱 比赛 比的是每只鱼的可爱程度 参赛的鱼被从左到右排成一排 头都朝向左边 然后每只鱼会得到一个整数数值 表示这只鱼的可爱程度 很显然整数越大 表示这只鱼越可