2019NHOI小甲解题思路
第一题 打印方阵
题目描述
下面这样的方阵很有规律,称为蛇形方阵。例如 3*3 的:
1 2 3
6 5 4
7 8 9
现在给定边长,输出相应的蛇形方阵。
输入:
1 个整数 n,表示要输出 n*n 的蛇形方阵, 1<=n <=100。
输出:
n 行,每行 n 个整数,空格隔开。
样例输入
4
样例输出
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
解题思路:送分题,这题的考点是二重循环,输出一个蛇形矩阵即可,使用一个标记变量记录当前所输出到的数据,然后判断行号的奇偶性,从左往右或者从右往左直接打表输出即可。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[105][105],n,num;
int main(){cin>>n;for(int i=0;i<n;i++){if(i%2==0)for(int j=0;j<n;j++) num++,a[i][j]=num;elsefor(int j=n-1;j>=0;j--) num++,a[i][j]=num;}for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<a[i][j]<<" ";cout<<endl;}return 0;
}
第二题 分数减法
题目描述:
这样的分式运算我们都会。请编程计算两个分数相减的结果。
输入格式:
第一行 2 个整数 a 和 b,表示一个分数, 1<=a<b <=10000。
第二行 2 个整数 c 和 d,表示一个分数, 1<=c<d <=10000。
输入数据保证计算结果为正。
输出格式:
2 个整数,表示结果。
提示: 运算结果分式要约分。
输入样例:
4 7 1 3
输出样例:
5 21
解题思路:这题的考点是数学知识,只要会如何编程求最大公约数与最小公倍数即可,先求两个分数中分母的最小公倍数进行通分,通分后,分子相减,最后通过结果中分子与分母的最大公约数进行约分。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int a,b,c,d;
int gcd(int x,int y)//求最大公约数
{if(x%y==0)return y;return gcd(y,x%y);
}int mcm(int x,int y)//求最小公倍数
{return x*y/gcd(x,y);
}int main(){cin>>a>>b>>c>>d;int fenmu=mcm(b,d);//结果的分母值 int fenzi=a*(fenmu/b)-c*(fenmu/d);//结果的分子值 int t=gcd(fenzi,fenmu);//分子和分母的最大公约数 cout<<fenzi/t<<" "<<fenmu/t;return 0;
}
第三题 倒背如流
题目描述
黑板上老师写了一行 N 个正整数,老师要考同学们的倒背如流能力,让学生从右向左读这些数字,并求出他们的和。例如写了 3 个整数: 123 45 60 。结果是: 06+54+321=381
输入格式:
第一行 1 个整数 n, 1<=n <=100。
第二行 n 个正整数,每个正整数不超过 1000000。
输出格式:
一个整数
输入样例:
3 123 45 60
输出样例:
381
解题思路:这题的考点是整数的颠倒,直接将输入的整数,数字颠倒后求和即可。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,a,b;
long long sum;
int main(){cin>>n;for(int i=0;i<n;i++){cin>>a;b=0;while(a>0)//整数的颠倒{b=b*10+a%10;a/=10;}sum+=b;//求和}cout<<sum;return 0;
}
第四题 集合的差
题目描述
有两个数列 A 和 B,那些在 A 中出现但不在 B 中出现的数就称为集合 A 和集合 B 的差: A-B。例如: A={1 ,4, 5, 2, 6} ,B={ 5,3,2,7} , 那么 A-B = {1,4,6}。
现在给你 2 个集合 A 和 B,求 A-B 有多少个数。
输入格式:
第一行 2个整数 na和 nb,表示集合 A和集合 B各有多少个整数,1<=na,nb<=10000。
第二行 na 个不同的正整数,表示集合 A 里的数,每个正整数不超过 10000。 第二行 nb 个不同的正整数,表示集合 B 里的数,每个正整数不超过 10000。
输出格式:
一个整数, A-B 里有多少数。
样例输入
5 4 5 2 4 8 7 3 7 6 2
样例输出
3
提示
A-B={5,4,8 }
解题思路:这题的考点是标技数组,题目要求出的是A集合的数字中,减去B集合中存在的A集合的数字;即求AB两个集合的差集,数据范围不大,直接使用两个标记数组进行比较即可。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int Na,Nb,Useda[10005],Usedb[10005],ans;
int main(){cin>>Na>>Nb;ans=Na;int x;for(int i=0;i<Na;i++){cin>>x;Useda[x]=1;//标记A集合}for(int i=0;i<Nb;i++){cin>>x;Usedb[x]=1;//标记B集合}for(int i=0;i<=10000;i++) if(Useda[i]==1&&Usedb[i]==1)//计算AB的差集ans--;cout<<ans;return 0;
}
第五题 可表示的数
题目描述
有 N 个整数从左到右排成一行,如果某个数等于它前面的 2 个数的和,就称这个数是可以表示的数。问给定的数列里有多少个数是可以表示的数。
输入格式:
第一行 1 个整数 N,表示数列有多少个整数。 1<=N<=10000。
第二行 N 个正整数,每个正整数不超过 10000。
输出格式:
一个整数,有多少可表示的数。
样例输入
8 5 2 2 3 4 8 7 16
样例输出
3
提示
样例解释
4=2+2; 8=5+3; 7=3+4
解题思路:这题的考点是标记数组与枚举模拟。因为数据范围不大,使用两重循环不会超时;直接在输入的同时使用循环模拟判断是否存在符合情况的数据,使用标记数组标记即可,要注意创建数组的大小,附代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,x[10005],sum[20005],ans;
int main(){cin>>n;for(int i=0;i<n;i++){cin>>x[i];if(sum[x[i]]==1)ans++;//判断是否存在两数和符合要求的情况for(int j=0;j<i;j++)sum[x[i]+x[j]]=1;//标记存在的情况}cout<<ans;return 0;
}
第六题 叠罗汉
题目描述
农场的 N 头奶牛喜欢玩叠罗汉游戏,就是几头奶牛 1 头奶牛接着 1头奶牛的站成一柱子形状。不过奶牛的力量不一样,用数值 Ci 表示第 i 头奶牛它的上面最多可以站多少头奶牛,问这些奶牛最少可以站成几个柱子形状。
输入格式:
第一行 1 个整数 N,表示有多少头奶牛。 1<=N<=1000。
第二行 N 个正整数 Ci,表示这些奶牛的力量。 0<=Ci<=1000。
输出格式:
一个整数,表示最少成几个“罗汉”。
样例输入
5 0 2 1 2 2
样例输出
2
提示
样例解释
可以第 1、第 3、第 2 头奶牛从上向下叠罗汉;第 4、第 5 头奶牛叠罗汉。
解题思路:这题的考点是贪心原理,将承受重量最大的奶牛放在柱子的最下面,那么柱子的数量最少。先使用标技数组标记每一种承受重量牛的数量,然后再以承受重量,模拟将牛从上往下、承受重量从小到大把牛放到对应的位置即可。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,a,c[1005],ans,gd;
int main(){cin>>n;for(int i=0;i<n;i++){cin>>a;c[a]++;} for(int i=0;i<=1000;i++)//遍历所有高度 {while(c[i]>0){ans++;gd=0;for(int j=i;j<=1000;j++)while(c[j]>0&&j>=gd)//可以在底部插入 {c[j]--;gd++;}}}cout<<ans;return 0;
}
2019NHOI小甲解题思路相关推荐
- 2020考研 管理类联考数学 【题型分析及解题思路】
第一章 整式分式 1.若一元n次多项式A被(或者是B的因式)一元1次多项式B整除,求解A中的几个系数a,b(解题思路:代入法,让因式值为0,也可以配合多元多项式基本公式将复杂的B变成简单的几个一次多项 ...
- 2014计算机三级网络技术,2014计算机三级网络技术综合题解题思路
2014计算机三级网络技术综合题解题思路,全部自码 第一小题 IP地址的计算公式 正常IP地址计算:已知IP地址:子网掩码: 地址类别:A类地址:1-126(00)B类地址:128-191(10) C ...
- 2020腾讯广告算法大赛:赛题理解与解题思路
写在前面 期待已久的2020腾讯广告算法大赛终于开始了,本届赛题"广告受众基础属性预估".本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!! 报名链接:https ...
- 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路
这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- 素数c语言程序解题思路,C语言上机实验题目解题思路.doc
上机实验题目解题思路 目录 第十三次实验:指针之一2 2453:步骤:2 2454:步骤:2 3575:步骤:方法同24543 3576:步骤:3 3580:步骤:3 3582:步骤:3 第十二次实验 ...
- java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...
算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...
- leetcode206.反转链表 解题思路(简单)
难度: 简单 题目:给你单链表的头结点head,请你反转链表,并返回反转后的链表. 示例1: 示例2: 示例3: 题目类型:数据结构链表 解题方法:双指针迭代法 解题思路: 1.申请两个新指针,分别指 ...
- LeetCode 中等难度 92. 反转链表 II解题思路
92. 反转链表 II 题目:中等难度 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4-& ...
最新文章
- 10玩rust_有趣的 Rust 类型系统: Trait
- idea软件,如何不每次弹出“欢迎界面!”
- saltstack一些常用模块和api调用方法
- yolov5检测完不显示框和标注
- 种群计数 (pop_count)
- 时间序列研(part9)--均衡与误差修正机制
- 10个经典的爆炸化学反应,个个都是你惹不起的“暴脾气”
- ubuntu下安装Node.js(源码安装)
- python退出帮助系统_Python基础(09):帮助
- java 复杂表达式计算_我的计算器. 用java实现的. 可以支持复杂表达式
- JSP(一):JSP概要
- POJO类与javaBean类的区别
- 一位企业家的成功之道
- u3d:200个插件免费分享
- 怎么把动图放到word里_word文档如何插入动图?
- Java1==Java2?Java1:Java2问题
- 前端构建:Less入了个门
- electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求
- 通过线路输入功能快速创建吉他谱
- 工具:valgrind学习
热门文章
- Navicat连接Mysql时 1251 - client does not support ...的问题
- struts2_action获取web资源的两种方式
- element 验证详解 自定义验证规则
- [转载] 七龙珠第一部——第100话 最后的手段
- 2019年让程序员崩溃的 60 个瞬间,笑死我了
- #机器学习--实例--主成分分析
- php switch case in,如何在PHP中使用switch case'或'?
- Java中:byte转换为int ,int转换为long
- ECC算法原理的认识
- h5端移动端软键盘弹起改变高度问题