PAT 乙级 ------ 1046~1050 划拳、编程团体赛、数字加密、数列的片段和、螺旋矩阵附思路和代码
这个鬼天气欸,又降温到十几度了。看帖子的你,今天也要开心啊!!!PEACE & LOVE
1046 划拳
思路: 每次读取四个数,根据规则求和比较,只有一方胜利一方失败从才会喝酒,同赢同输没人喝酒。
#include<stdio.h>int main() {int n, arr[4], cnt, _cnt;cnt = _cnt = 0;scanf("%d", &n);for(int i=0; i<n; i++) {scanf("%d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3]);arr[1] = arr[0]+arr[2] == arr[1] ? 1 : 0;arr[3] = arr[0]+arr[2] == arr[3] ? 1 : 0;if(arr[1] > arr[3])//甲胜_cnt++;//乙喝酒else if(arr[3] > arr[1])//乙胜cnt++;//甲喝酒}printf("%d %d", cnt, _cnt);return 0;
}
1047 编程团体赛
思路: 队伍编号作数组下标存储队伍总成绩,输入过程中确认最高分和最高分队伍编号。因为队伍编号从1开始,所可以将最高成绩存入数组零位置用于每轮循环的比较。
#include<stdio.h>
#define LEN 1001int main() {int n, maxIndex, team[LEN] = {0};scanf("%d", &n);for(int i=0; i<n; i++) {int tId, player, grade;scanf("%d-%d %d", &tId, &player, &grade);team[tId] += grade;if(team[tId] > team[0]) {team[0] = team[tId];maxIndex = tId;}}printf("%d %d", maxIndex, team[0]);//或者team[maxIndex]return 0;
}
1048 数字加密
思路: 将密码和数据当字符处理,从字符末尾按规则处理,最后输出字符串。注意当数据长度大于密钥长度或者当数据长度小于密钥长度时,长度较短的那一方要用0继续加密。
#include<stdio.h>
#include<string.h>
#define LEN 101int main() {int i, _i, j, a, b, index;char secert[LEN], info[LEN], res[LEN], c[] = "0123456789JQK";scanf("%s %s", &secert, &info);i = strlen(info)-1;//加密数据数组下标j = strlen(secert)-1;//密钥数组下标index = i>j ? i : j;res[index+1] = '\0';for(; i>=0 || j>=0; i--,j--,index--) {_i = strlen(info)-i;//从个位开始为第一位;a = j>=0 ? secert[j]-'0' : 0; //正整数B的长度大于密钥时,用0继续加密b = i>=0 ? info[i]-'0' : 0;//当B的长度小于密钥长度,用0继续加密if(_i%2 == 0)res[index] = b-a>=0 ? b-a+'0' : b-a+10+'0';//偶数位elseres[index] = c[(b+a)%13];//奇数位}printf("%s", res);return 0;
}
1049 数列的片段和
思路: 不是求每个片段的和而是求每个数次出现了几次。
用归纳法:对第i个元素(i从0开始),它会在(i+1)种类型的片段中出现,每类片段中出现次数为(n-i)次;
#include<stdio.h>int main() {int n;long double sum = 0;scanf("%d\n",&n);long double arr[n];for(int i=0; i<n; i++)scanf("%llf",&arr[i]);for(int i=0; i<n; i++)sum += arr[i]*(i+1)*(n-i);printf("%.2llf",sum);
}
1050 螺旋矩阵
思路: 分三步:排序、确认行列数、螺旋填数组。填数组分为四步:向右走,向下走,向左走,向上走。关键在于下一个填充位置的判断:1. 下一个位置在行列范围内;2.下一个位置为空;注意:(测试点7段错误) 存放结果的二维数组的大小设置,行列数都特别大比如10000是无法创建的,而行列数过小无法存放全部结果。要求行数大于列数且右条件可得列数最大为100;所以行列数设为10001 和 101;
#include<stdio.h>
#include<math.h>
int GetMN(int n) {int i, k, min = 10000;for(i=1; i<=sqrt(n); i++) {if(n%i == 0) {if( abs(n/i - i) < min) {min = abs(n/i - i);k = i;}}}return n/k;
}void QuickSort(int arr[], int low, int high) {if(low < high) {int pivotpos = Partition(arr, low, high);QuickSort(arr,low,pivotpos-1);QuickSort(arr,pivotpos+1,high);}
}int Partition(int arr[], int low, int high) {int pivot = arr[low];while(low < high) {while(arr[high] <= pivot && high > low)high--;arr[low] = arr[high];while(arr[low] >= pivot && low < high)low++;arr[high] = arr[low];}arr[low] = pivot;return low;
}int main() {int N, m, n, i, j, k, arr[10000], res[10001][101] = {0};scanf("%d",&N);for(i=0; i<N; i++)scanf("%d", &arr[i]);m = GetMN(N);n = N/m;i = j = k = 0;QuickSort(arr, 0, N-1);while(N>0) {while(N>0 && j<n && res[i][j]==0) {//向右走res[i][j++] = arr[k++];N--;}i++;j--;while(N>0 && i<m && res[i][j]==0) {//向下走res[i++][j] = arr[k++];N--;}i--;j--;while(N>0 && j>=0 && res[i][j]==0) {//向左走res[i][j--] = arr[k++];N--;}i--;j++;while(N>0 && i>=0 && res[i][j]==0) {//向上走res[i--][j] = arr[k++];N--;}i++;j++;}for(int x=0; x<m; x++) {for(int y=0; y<n; y++) {printf("%d",res[x][y]);if(y != n-1)printf(" ");}if(x != m-1)printf("\n");}return 0;
}
PAT 乙级 ------ 1046~1050 划拳、编程团体赛、数字加密、数列的片段和、螺旋矩阵附思路和代码相关推荐
- PAT 乙级 1046(划拳)
PAT 乙级 1045 题目要求 代码 思路 题目要求 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊 ...
- PAT乙级(1036 跟奥巴马一起编程)
PAT乙级 1036 跟奥巴马一起编程 题目描述及解题代码 题目描述:画正方形 解题思路:N个字符分情况 为偶数时 行数=N/2 为奇数时行数=N/2+1 所以用一个共同代码把行数赋值给t变量 ...
- [PAT乙级]1046 划拳
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- PAT 乙级 1046. 划拳(15) Java版
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- PAT乙级-1046划拳
题目描述 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢 ...
- pat 乙级 1036 跟奥巴马一起编程(C++)
题目 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的 ...
- PAT 乙级练习 1050 螺旋矩阵 - 超级详细的思路讲解
PAT 乙级练习 题解合集 本题链接 题目 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按 ...
- 「PAT乙级真题解析」Basic Level 1072 开学寄语 (问题分析+完整步骤+伪代码描述+提交通过代码)
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1072 开学寄语 问题分析 题设要求查找学 ...
- 「PAT乙级真题解析」Basic Level 1031 查验身份证 (问题分析+完整步骤+伪代码描述+提交通过代码)
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1031 问题分析 我们看到题目详细地描述了 ...
最新文章
- Java面试之Java基础下册(含答案)
- GDI+ 学习记录(3): 虚线画笔 - Dash
- Linux内核源代码分析-第三章 内核体系结构概述-1
- Spring Boot与MyBatis整合
- Error:Unable to resolve target android-19
- 能使曲线变平滑的一维滤波器_双边滤波器的原理及实现
- 【贪心】Radar Installation(poj 1328)
- 名词解释 JDK JRE JVM
- Cocoa Touch事件处理流程--响应者链
- 《深入理解 Spring Cloud 与微服务构建》第十一章 服务网关
- oracle 结构化语言查询 DML DDL DCL
- 【U盘量产工具】windows无法完成格式化——芯邦主控CBM2098S
- 饥荒联机版服务器重置,饥荒联机版服务器重置世界 | 手游网游页游攻略大全
- 微信小程序最全Tab选项卡,你要的功能都在这里啦
- 微信京东手机怎么联系客服人工服务器,微信人工客服电话是多少?打不通怎么办?...
- CSDN博客中删除空白代码块
- python求标准正态分布的分布函数值(具体实现及调用函数)
- VS生成桌面应用程序
- scada系统集成_设计 SCADA 应用程序软件
- C# WinForm系列-创建Windows项目
热门文章
- 机器学习入门之决策树法
- tensorflow 通过TextLineDataset dataset.map 读取数据
- Android文本长按qq风格,Android仿QQ、微信聊天界面长按提示框效果
- 大班我和计算机比本领教学反思,大班语言《谁的本领大》教案反思
- java fusioncharts_怎样在java web中使用fusioncharts
- Visio2013中插入Mathtype公式的方法
- Android之代码混淆
- 运维统一脚本门户(新版)
- CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍
- bugku-web 你从哪里来 writeup