OJ题库记录

编程入门 行业动态 更新时间:2024-10-26 02:25:32

OJ<a href=https://www.elefans.com/category/jswz/34/1762675.html style=题库记录"/>

OJ题库记录

每天做一点,攒够了就在这边记录下。水平有限,部分参考百度其他大神思路,有问题希望指教提醒下,大家一起学习进步!
1、题目描述
计算 a+b
输入
第一行,一个正整数n,表示数据组数。
接下来n行,每行2个整数a,b(保证a,b,a+b均在int范围内)。
输出
对于每组数据,输出一行,为 a+b 的值。
输入样例
2
1 2
2 3
输出样例
3
5
代码样例

#include <stdio.h>
int main()
{int n, a, b;scanf("%d", &n);while(n--){scanf("%d%d", &a, &b);printf("%d\n", (a+b));}/* // 或用如下for循环代替while循环int i;for(i=0; i<n; i++){scanf("%d%d", &a, &b);printf("%d\n", (a+b));}*/return 0;
}

2、题目描述
求两个整数的余数。
输入
两个正整数n,m。
输出
输出一个整数,为n除以m的余数。
输入样例
12 5
输出样例
2
代码举例:

#include <iostream>
using namespace std;
int main(void)
{
int x,y,z;
cout<<"INPUT";
cin>>x>>y;
cout<<"OUTPUT";
z=x%y;
cout<<z<<endl;
}

3、题目描述
BlueFly是一个壕,
他有一大堆的挖掘机,通过挖掘机发家致富。
他不仅是厨师,
还是黑客,
还是高级技师,
拥有十八般武艺。。。
BlueFly是个壕,他有一个妹妹叫FlySnow。(脑洞不要太大。。)
BlueFly每天都要给他的妹妹发糖吃,第一天他给他妹妹发了n个糖,以后每天发的糖的数量比前一天多m个。 请问k天以后BlueFly总共发了多少块糖。(假定FlySnow都能吃完这些糖 233)
输入
输入多组数据。
每组数据只有一行,是三个正整数,分别为n,m,k,保证每个数都在int范围内。
输出
输出这k+1天中FlySnow总共吃了多少糖,保证输出结果在int范围内。
输入样例
1 1 2
1 2 2
输出样例
6
9
样例解释
第一天吃糖数量为1,每天比前一天多吃一块,2天后吃糖数量为1+2*1=3块。总共吃糖的个数就是1+2+3=6。总共吃了3天,而不是2天。
输入提示
用while(scanf("%d%d%d",&a,&b,&c) != EOF)来进行多组输入的控制,输入结束的标志是EOF。
程序样例:

#include <iostream>
using namespace std;
int main(void)
{
int x,y,z;
cout<<"INPUT";
while(cin>>x>>y>>z)//控制输入,实际检测的是cin,检测流的状态
{
int s;
s=(z+1)*(x+y);
cout<<"OUTPUT";
cout<<s<<endl;
}
}

4、题目描述
Kevin·Feng是一只萌萌哒壕。
但是有一天Kevin听说有一只更壕的壕,叫做0yang。
所以Kevin决定跟她一决高下。
但是现在遇到一个问题,就是先要at一下0yang,才能一决高下。
不过Kevin的壕前些天买了一个神奇的键盘,输入字符之前要先敲一下"“这个键。而且at操作要在双引号里面。(敲双引号的时候不需要敲击”"键)
所以Kevin应该如何敲击键盘呢?
输入
无需输入
输出
输出一行字符。(换句话说只要你的输出跟输出样例一样就对了)
输出样例
“\a\t\0\y\a\n\g”
程序样例:

#include<iostream>
using namespace std;
int main(){cout<<"\"\\a\\t\\0\\y\\a\\n\\g""\"";//其中\\a表示输出\a,"\""输出双引号return 0;
} 

5、题目描述
jhljx是一个特别喜欢数学的人,精通初等数学以上的各种数学,各种积分他都很精通。。
但他唯一的缺陷就是不会算加减法。。
于是,他只能默默的回去上小学了。。Orz。。他的小学老师是LuxakyLuee。
LuxakyLuee知道这件事以后说这是病,得治啊。。
LuxakyLuee不让他做普通的加减法,因为对于特殊病人要采取特殊手段治疗吖。
LuxakyLuee给了jhljx一个数,然后让他把这个数的每一位加起来。
如果加起来的和的位数多于1位的话,就继续将这个数的每一位数字加起来,直到最后只有一个为止。
这样jhljx就能进行好多次加法运算了。他表示很开心。
输入
输入一组数据。
该组数据只有一行,为一个整数n。
(保证33.33%的n在int范围内,33.33%的n在long long范围内,33.33%的n超过long long范围)
输出
输出最后所得的结果。
输入样例
987
输出样例
6
程序样例:

#include <iostream>
#include <stdio.h>
using namespace std;
int sum(int a)
{int b=0;while(a!=0)//for循环多根据循环次数限制做多少次重复操作,while循环是满足什么dao条件的时候才做某种操作。{  b=b+a%10;a=a/10;}
if(b>9)
return sum(b);
return b;
}int main()
{int a;cout<<"INPUT";cin>>a;
int s=sum(a);
cout<<"OUTPUT";
cout<<s<<endl;
return 0;
}

6、题目描述
输入一个三位数,分离出它的百位,十位,个位,翻转后输出。
输入
多组测试数据,每组输入一个x(100≤x≤999)。
输出
每组测试数据输出一行,为反转后的数字。
输入样例
127
742
640
输出样例
721
247
46
程序样例:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{int a;int b=0;cout<<"INPUT";cin>>a;
while(a!=0)
{b=10*b+a%10;
a=a/10;}
cout<<"OUTPUT";
cout<<b<<endl;
return 0;
}

7、题目描述
LastDay要去西安了。
但是LastDay的狗狗被禁止带上火车。
为了防止饿出狗命来,LastDay 机智的准备了一些狗粮 (#)。
作为强迫症,LastDay决定把狗粮摆放的整齐大方。 比如倒三角形。 Last_Day手残不会摆,是时候你上场了。
输入
输入多组数据。
每组数据只有一行,为一个正整数n(n<=30)。
输出
每组数据输出n行,为n层的倒三角形
输入样例
2
3
输出样例
倒三角

程序样例:

#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{int i,j,k;int n;cin>>n;//正三角for(i=0;i<n;i++){for(j=0;j<n-i;j++)printf(" ");for(k=0;k<=i;k++)printf(" *");printf("\n");}	//倒三角for(i=0;i<n;i++){for(j=0;j<=i;j++)printf(" ");for(k=0;k<n-i;k++)printf(" *");printf("\n");}
}

8、题目描述
creeper学妹有一天拿来一个表达式a/bc+d/e/fgh,然后在纸上一堆数字让Lawliet做,每一组不超过1秒。Lawliet表示瞬间被秒杀了- -#所以推倒creeper学妹的任务只能交给大家来完成了。
输入
多组数据,第一行一个数T,表示有T组数据。(1<T<1000)
接下来T行,每行8个数a,b,c,d,e,f,g,h(0<=a,b,c,d,e,f,g,h<=999999999,b,e,f均不为0)表示一组数据。
保证a/bc、d/e/fg
h与最终结果均为整数且在int范围内。
输出
每组数据输出一行,为最终计算结果。
输入样例
1
6 2 3 9 3 1 6 2
输出样例
45
Hint
此题禁用float和double
GG说long double也不能忍!!!
数据可能比较弱。 整个式子其实就是(a×c)/b+(d×g×h)/(e×f)= =
程序样例:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{int T;int a, b, c, d, e, f, g, h;cout<<"INPUT";cin>>T;cin>>a>>b>>c>>d>>e>>f>>g>>h;while (T-->0) {int s=(a*c)/b + (d*g*h)/(e*f);cout<<"OUTPUT";cout<<s;}return 0;
}

9、题目描述
零崎最近一段时间非常无聊,于是他决定进行一场冒险,然而无聊的人遇到的冒险也非常的无聊,他的冒险刚刚开始就要结束了。 理由也非常的无聊,因为一个无聊的大魔王决定用一个非常有魔(wu)力(liao)的方式毁灭世界。 魔王有三个具有魔(wu)力(liao)的杆,暂时称为ABC,还有n个具有魔(wu)力(liao)的大小全都不同的盘子,这些盘子按照大小顺序放在A杆上,现在魔王要用具有魔(wu)力(liao)的方式移动到C杆,移动的过程中,小的盘子仍然只能摆在大的盘子上面而不能发生错乱,否侧魔王的魔法就会失灵。 然而魔王似乎想找一个无聊的人来替他完成这个魔法,而无聊的零崎也觉得这个事情非常的无聊,干脆就决定还是让你们去做。 零崎也不知道这个无聊的魔王到底有多少个有魔(wu)力(liao)的盘子,所以他说多少个你们就当是多少个吧。
输入
多组数据,每组一个数字n表示魔王的盘子数。
输出
对于每组数据,输出为魔王魔法发动后盘子移动的过程,两组输出之间用空行隔开。
输入样例
1
2
输出样例
A to C

A to B
A to C
B to C
参考网上OJ算法可运行③,程序样例:

#include<stdio.h>
void move(int n,char a,char b,char c){if(n==1)printf("%c to %c\n",a,c);//当n只有1个的时候直接从a移动到c  else{move(n-1,a,c,b);//把a的n-1个盘子通过c移动到bprintf("%c to %c\n",a,c);//把a的最后1个盘(最大的盘)移动到cmove(n-1,b,a,c);//把b上面的n-1个盘通过a移动到c}
}int main(){int n;while(~scanf("%d",&n)){move(n,'A','B','C');}return 0;
}

10、题目描述
零崎本以为他的无聊冒险马上就要结束了,然而实际上距离魔王的魔法成功发动还有很久很久,于是他的无聊冒险还可以继续…… 无聊的零崎需要给自己的冒险找点事做,然而实际上他的日常非常平和,如果说有什么意外的话,那就是他去打麻将了。零崎在玩一种叫做日式麻将的竞技游戏,然而无聊的零崎总是遭遇别人立直需要防守的场面。 零崎在防守时,会跟打现物和搏筋兜牌两种技能,然而为了不被婊得太惨,零崎不会连续搏筋兜牌。也就是说,零崎任意两次选择中不会都是搏筋兜牌。 那么对于n次舍牌,无聊的零崎会有多少种选择? 因为无聊的零崎可以打很久的麻将,所以n可能很大,无聊的零崎决定只要结果对100007求模后的选择数。
输入
多组输入数据,每组一个数字n,1<=n<=Int_MAX
输出
每组一行,只需要选择种数对100007求模后的结果。
输入样例
1
2
输出样例
2
3
Hint
听说这个也是很简单的,不然你们推推递推公式看?
ps:
n=1:刚,怂
n=2 刚怂,怂怂,怂刚
n=3 刚怂怂,刚怂刚,怂怂怂,怂怂刚,怂刚怂

这里参考了CSDN账号ShaneTsui 的讲解博文,原文链接:北航OJ-2014级第1次算法上机题解
我们用O和X分别表示现物和搏筋兜牌。
  假设有3次舍牌,我们可以很容易地枚举出所有排列方式:OOO, OOX, OXO, XOO, XOX,我们把每一个这样的一个序列叫做一种舍牌方式。
  为了方便讨论,我们给出如下定义:F(n) = n次舍牌中不同的舍牌方式数,比如上面的例子中,F(3) = 5。
  我们来尝试推导具有普适性的公式:
  假设F(n-2)种舍牌方式中,有m次以现物结束(类似于OXOXXX……O),F(n-2) - m次以搏筋兜牌结束(类似于OXOXXX……X)。
  对于类似OXOXXX……O的舍牌方式,下一次舍牌既可以是O也可以是X,所以下一次有2m中舍牌方式;对于类似OXOXXX……X的舍牌方式,下一次只能是O,所以下一次舍牌有F(n-2) - m种方式。
  我们把两种舍牌方式数相加,就得到:
F(n-1) = 2
m + F(n-2) - m = F(n-2) + m
  同理,由上面的推理结论,F(n-1)中有F(n-2)次以O结束,m次以X结束,所以:
F(n) = 2*F(n-2) + m = (F(n-2) + m) + F(n-2) = F(n-1) + F(n-2)
  而这就是斐波那契数列的递推公式。
  
  题目中要对其进行取模处理。这里需要补充一个结论:
斐波那契数列对某个整数取模的结果构成循环数列
  这个结论的证明很繁琐,故不在此列出,可以去这篇博文下查看:
  由于时间和空间有限,不可能使用递归方法对于每一个输入值进行求解。故进行预处理操作,把一个周期内的斐波那契数取模后的结果存入数组。对于之后的每一次查询,只需要用循环周期对其进行取模操作,然后根据余数直接读取数组里保存的值。
代码举例:

#include <iostream>
#define INF 0xFFFFFF
using namespace std;
int remainders[100000];//取余后的斐波那契数列,仅保存一个周期的数
int T = 2;//循环节
void calFibonacciRemainders()
{remainders[0] = 1;remainders[1] = 2;while (1){remainders[T] = (remainders[T - 1] + remainders[T - 2]) % 100007;if (remainders[T] == remainders[1]){T--;break;}T++;}
}
int main()
{calFibonacciRemainders();int n;while (cin >> n){n %= T;if (n == 0)n = T;cout << remainders[n] << endl;}
}

更多推荐

OJ题库记录

本文发布于:2024-03-23 14:34:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739313.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:题库   OJ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!