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课作业的更多相关文章

  1. noip第29课作业

    1.   钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...

  2. noip第19课作业

    1. 谁考了第K名 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. [输入格式] 第一行有两个整数,分别是学生的人数n(1<=n<=100 ...

  3. noip第5课作业

    1.     计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...

  4. noip第1课作业

    1.    求三个数的乘积和三次方和 [问题描述] 编程实现输入任意三个整数a, b, c,将这三个数的乘积以及三次方和输出: [样例输入] 1 2 3 [样例输出] 6 36 #include &l ...

  5. noip第11课作业

    1.    数字比较 定义一个函数check(n,d),让它返回一个布尔值,如果数字d在正整数n的某位中出现则返回true,否则返回false. 例如:check(325719,3)==true:ch ...

  6. noip第8课作业

    1.     计算书费 [问题描述]下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 C++程序设计教程 78 元/本 人工智能 35  ...

  7. noip第13课资料

  8. noip第34课作业

    1.    信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...

  9. noip第33课作业

    1.    排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...

随机推荐

  1. mysql 常用 sql

    查询表创建时间.修改时间等 SELECT * FROM information_schema.tables    WHERE table_schema='ty_supplier' AND table_ ...

  2. c#特性attribute:

    特性是被编译到metadata中,  是提供给反射用的. 特性attribute:1 什么是attribute,和注释有什么区别 2 声明和使用attribute3 使用attribute完成扩展4 ...

  3. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)

    1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...

  4. 如何为linux系统设置全局的默认网络代理

    方法1:更改全局配置文件/etc/profile all_proxy="all_proxy=socks://proxy.xxx.com.cn:80/" ftp_proxy=&quo ...

  5. 洛谷2860 [USACO06JAN]冗余路径Redundant Paths

    原题链接 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上. 显然对于在一个边双连通分量里的点已经满足要求,所以可以用\(tarjan\)找边双并缩点. 对于缩点后的树,先讲下我自己的弱鸡 ...

  6. Nowcoder OI赛制测试2 F 假的数学题 - 斯特林公式 + 二分

    Description 给定$X$, 找到最小的$N$ 使得$N! > X^X$ 数据范围:  $x <= 1e11$ Solution $X^X$ 太大, 高精也存不过, 所以取对数 : ...

  7. Java Http接收中文乱码解决

    当时url传递时,可用 byte[] bytes=reqdata_s.getBytes("ISO-8859-1"); String name=new String(bytes,&q ...

  8. python range用法

    1. range(n) 相当于枚举 从0<=i<n的整数 增量为1 for i in range(4): print(i) 结果:0 1 2 3 2. range(5,10) 相当于枚举 ...

  9. flask 中文编码解码

    process.append("中文") print(process) # return Response(json.dumps(process), mimetype='appli ...

  10. object SparkStreaming_StateFul {

    窗口查询 ) )).reduceByKeyAndWindow(_+_,_-_,Seconds(10),Seconds(15))     每隔15s进行查询,查询为前10s的结果.这里的值必须为采集时间 ...