第一题 打印方阵

题目描述

下面这样的方阵很有规律,称为蛇形方阵。例如 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小甲解题思路相关推荐

  1. 2020考研 管理类联考数学 【题型分析及解题思路】

    第一章 整式分式 1.若一元n次多项式A被(或者是B的因式)一元1次多项式B整除,求解A中的几个系数a,b(解题思路:代入法,让因式值为0,也可以配合多元多项式基本公式将复杂的B变成简单的几个一次多项 ...

  2. 2014计算机三级网络技术,2014计算机三级网络技术综合题解题思路

    2014计算机三级网络技术综合题解题思路,全部自码 第一小题 IP地址的计算公式 正常IP地址计算:已知IP地址:子网掩码: 地址类别:A类地址:1-126(00)B类地址:128-191(10) C ...

  3. 2020腾讯广告算法大赛:赛题理解与解题思路

    写在前面 期待已久的2020腾讯广告算法大赛终于开始了,本届赛题"广告受众基础属性预估".本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!! 报名链接:https ...

  4. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路

    这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...

  5. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  6. 素数c语言程序解题思路,C语言上机实验题目解题思路.doc

    上机实验题目解题思路 目录 第十三次实验:指针之一2 2453:步骤:2 2454:步骤:2 3575:步骤:方法同24543 3576:步骤:3 3580:步骤:3 3582:步骤:3 第十二次实验 ...

  7. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...

    算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...

  8. leetcode206.反转链表 解题思路(简单)

    难度: 简单 题目:给你单链表的头结点head,请你反转链表,并返回反转后的链表. 示例1: 示例2: 示例3: 题目类型:数据结构链表 解题方法:双指针迭代法 解题思路: 1.申请两个新指针,分别指 ...

  9. LeetCode 中等难度 92. 反转链表 II解题思路

    92. 反转链表 II 题目:中等难度 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4-& ...

最新文章

  1. 10玩rust_有趣的 Rust 类型系统: Trait
  2. idea软件,如何不每次弹出“欢迎界面!”
  3. saltstack一些常用模块和api调用方法
  4. yolov5检测完不显示框和标注
  5. 种群计数 (pop_count)
  6. 时间序列研(part9)--均衡与误差修正机制
  7. 10个经典的爆炸化学反应,个个都是你惹不起的“暴脾气”
  8. ubuntu下安装Node.js(源码安装)
  9. python退出帮助系统_Python基础(09):帮助
  10. java 复杂表达式计算_我的计算器. 用java实现的. 可以支持复杂表达式
  11. JSP(一):JSP概要
  12. POJO类与javaBean类的区别
  13. 一位企业家的成功之道
  14. u3d:200个插件免费分享
  15. 怎么把动图放到word里_word文档如何插入动图?
  16. Java1==Java2?Java1:Java2问题
  17. 前端构建:Less入了个门
  18. electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求
  19. 通过线路输入功能快速创建吉他谱
  20. 工具:valgrind学习

热门文章

  1. Navicat连接Mysql时 1251 - client does not support ...的问题
  2. struts2_action获取web资源的两种方式
  3. element 验证详解 自定义验证规则
  4. [转载] 七龙珠第一部——第100话 最后的手段
  5. 2019年让程序员崩溃的 60 个瞬间,笑死我了
  6. #机器学习--实例--主成分分析
  7. php switch case in,如何在PHP中使用switch case'或'?
  8. Java中:byte转换为int ,int转换为long
  9. ECC算法原理的认识
  10. h5端移动端软键盘弹起改变高度问题