noip第13课作业
1. 排身高
【问题描述】
鹏鹏的班上一共有 n 个学生。刚好每个同学的身高互不相同。鹏鹏想知道,所有同学中身高第二高的是谁。
输入格式:输入共两行,第一行有一个整数 n(2≤n≤100),表示有 n 个学生。第二行有 n 个用空格分开的整数 a1,……, an,依次表示每个同学的身高。ai 是不超过 200 的正整数。
输出格式:输出为两个整数,中间用空格隔开, 分别表示身高第二高的同学的编号和身高。
【输入样例】
4
140 145 152 144
【输出样例】
2 145
#include<iostream>
#include<algorithm>
using namespace std;
struct student {
int num,h;
};
student stu[];
bool comp(student a,student b) {
return a.h > b.h;
}
int main() {
freopen("high.txt","r",stdin);
freopen("highout.txt","w",stdout);
int n;
cin >> n;
for(int i=; i<=n; i++) {
stu[i].num = i;
cin >> stu[i].h;
}
sort(stu + ,stu + n + ,comp);
cout << stu[].num << " "<< stu[].h;
fclose(stdin);
fclose(stdout);
return ;
}
2. 大整数加法
【问题描述】
求两个不超过200位的非负整数的和。
输入:共2行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出:一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【样例输入】
22222222222222222222
33333333333333333333
【样例输出】
55555555555555555555
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a1[]= {},b1[]= {};
int a[]= {},b[]= {},c[]= {},lena,lenb,i;
int lenc = , x = ;
cin>>a1>>b1;
lena = strlen(a1);
lenb = strlen(b1);
for(i = ; i <= lena-; i++) {
a[lena-i-] = a1[i] - ;
}
for(i = ; i <= lenb -; i++) {
b[lenb-i-] = b1[i] - ;
}
while(lenc<lena||lenc<lenb) {
c[lenc]=a[lenc]+b[lenc]+x;
x = c[lenc]/;
c[lenc] = c[lenc]%;
lenc++;
}
c[lenc] = x;
for(i = lenc; i >=; i--) {
if(c[i] != ) {
break;
}
}
for( ; i >=; i--)
cout << c[i];
cout << endl; return ;
}
1. 大整数的减法
【问题描述】
求两个大的正整数相减的差。
输入:共2行,第1行是被减数a,第2行是减数b(a>b并且a,b的位数不同且不存在借位)。每个大整数不超过200位,不会有多余的前导0。
输出:一行,即所求的差。
【样例输入】
9999999999999999999999999999999999999
9999999999999
【样例输出】
9999999999999999999999990000000000000
#include<iostream>
#include<cstring>
using namespace std;
int main() {
char a1[]= {},b1[]= {};
int a[]= {},b[]= {},c[]= {};
int lena,lenb,i,lenc = ;
cin>>a1>>b1;
lena= strlen(a1);
lenb = strlen(b1);
for(i = ; i <= lena-; i++) {
a[lena-i-] = a1[i] - ;
}
for(i = ; i <= lenb-; i++) {
b[lenb-i-] = b1[i] - ;
}
while(lenc<lena||lenc<lenb) {
if(a[lenc] < b[lenc]) {
a[lenc]+=;
a[lenc+]--;
}
c[lenc]=a[lenc]-b[lenc];
lenc++;
}
while((c[lenc-] == )&&(lenc > )) lenc--;
for(i = lenc-; i >=; i--) {
cout << c[i];
}
cout << endl;
return ;
}
2. 大整数的因子
【问题描述】
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入:一个非负整数c,c的位数<=30。
输出:若存在满足 c % k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
【样例输入1】
30
【样例输出1】
2 3 5 6
【样例输入2】
397297374785857235
【样例输出2】
5
#include<iostream>
#include<cstring>
//#include<algorithm>
using namespace std;
int main() {
int i,j,ans = ;
char a[];
cin >> a;
for(j=; j<=; j++) {
int cur = ;
for(i=; i<strlen(a); i++) {
cur = cur* +a[i]-'';
cur %= j;
}
if(cur == ) {
cout << j << " ";
ans ++;
}
}
if(ans==) {
cout << "none" <<endl;
}
return ;
}
3. 回文数
【问题描述】
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:对整数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于整数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次加法,上例中最少用了4步得到回文数4884。
写一个程序,给定一个数N,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入:一行。输入一个整数N(N的位数少于100),用于进行加法求回文数。
输出:一行。如果能得到回文数,输出最少的步数M,如果30以内不可能得到,则输出“Impossible!”
【样例输入1】
87
【样例输出1】
4
【样例输入2】
23445456443988173748455
【样例输出2】
Impossible!
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[]= {};
cin>>s;
int a[]= {},b[]= {};
int i,lens;
lens=strlen(s);
for(i=; i<lens; i++) {
b[i]=s[i]-;
a[lens--i]=s[i]-;
}
int c=;
for(i=; i<lens/; i++)
if(a[i]!=a[lens--i]) {
c=;
break;
}
if(c==) {
cout<<;
return ;
}
int w=;
while(w<=) {
int x=;
for(i=; i<lens; i++) {
a[i]+=b[i]+x;
x=a[i]/;
a[i]%=;
}
if(x==) {
lens++;
a[lens-]=;
}
int k=;
for(i=; i<lens/; i++)
if(a[i]!=a[lens--i]) {
k=;
break;
} if(k==) {
cout<<w;
return ;
}
for(i=; i<lens; i++) b[i]=a[lens--i];
w++;
}
cout<<"Impossible!"<<endl;
return ;
}
noip第13课作业的更多相关文章
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...
- noip第19课作业
1. 谁考了第K名 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. [输入格式] 第一行有两个整数,分别是学生的人数n(1<=n<=100 ...
- noip第5课作业
1. 计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...
- noip第1课作业
1. 求三个数的乘积和三次方和 [问题描述] 编程实现输入任意三个整数a, b, c,将这三个数的乘积以及三次方和输出: [样例输入] 1 2 3 [样例输出] 6 36 #include &l ...
- noip第11课作业
1. 数字比较 定义一个函数check(n,d),让它返回一个布尔值,如果数字d在正整数n的某位中出现则返回true,否则返回false. 例如:check(325719,3)==true:ch ...
- noip第8课作业
1. 计算书费 [问题描述]下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 C++程序设计教程 78 元/本 人工智能 35 ...
- noip第13课资料
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- noip第33课作业
1. 排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...
随机推荐
- c++中“箭头(->)”和“点号(.)”操作符的区别
首先介绍一下C++中的结构.对于一个结构: struct MyStruct { int member_a; }; 如果有个变量MyStruct s,那么使用其中的成员元素时可以用: s.member_ ...
- mtcp的快速编译(连接)
mtcp的快速编译 http://mos.kaist.edu/guide/config/03_build_mtcp.html 介绍DPDK中使用mtcp的文档 https://dpdksummit.c ...
- iOS.AutoLayout.2.CustomView-with-AutoLayout
Custom View Which Support AutoLayout 创建支持AutoLayout的Custom View AutoLayout 通过使view更加的自组织来减轻controlle ...
- c# 反编译后窗口控件在vs中打不开的修改方法
DialogResult.Cancel System.Windows.Forms.DialogResult.Cancel DialogResult.OK System.Windows.Forms.Di ...
- pdo不抛出异常
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
- Hive 系列(一)安装部署
Hive 系列(一)安装部署 Hive 官网:http://hive.apache.org.参考手册 一.环境准备 JDK 1.8 :从 Oracle 官网下载,设置环境变量(JAVA_HOME.PA ...
- ERROR - abandon connection, open stackTrace
项目采用的是阿里巴巴的druid连接池,配置文件中有个removeAbandoned的配置(意义是某个连接如果超过设置的连接活动时间的话,连接会被强制关掉),但是因为爬虫中某些连接会长时间处于活动状态 ...
- jquery ajax 全局事件
jquery的ajax方法的全部全局事件:(不管是$.ajax().$.get().$.load().$.getJSON()等都会默认触发全局事件) ajaxStart:ajax请求开始前 ajaxS ...
- SVN简明教程
SVN简明教程 Posted on 2010-09-07 17:34 幻海蓝梦 阅读(7196) 评论(0) 编辑 收藏 所属分类: 版本管理 http://www.emsym.com/blog ...
- Mac下Maven安装与配置
Mac下Maven安装与配置 下载maven http://maven.apache.org/download.cgi main->download菜单下的Files 下载后解压在Documen ...