特别声明:本文所有代码均为原创!!!
P1008:
题目:
[NOIP1998 普及组] 三连击
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1, 2…… ,9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1 : 2 : 3 的比例,试求出所有满足条件的 3 个三位数。
输入格式
无
输出格式
若干行,每行 3 个数字。按照每行第 1 个数字升序排列。
提示
NOIP1998 普及组 第一题
这道题我最推荐的做法其实就是手算(毕竟那时候的NOIP一天就三道题)
所以,经过我的编(shou)写(suan),代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"192 384 576\n";
cout<<"219 438 657\n";
cout<<"273 546 819\n";
cout<<"327 654 981";
return 0;
}
P1014:
题目:
[NOIP1999 普及组] Cantor 表
题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以 Z 字形给上表的每一项编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…
输入格式
整数 N(N<=1000000)
输出格式
表中的第 N 项
我们把这张表扭转四十五度,就变成了下面这样:
1/1 …
2/1 1/2 …
3/1 2/2 1/3 …
4/1 3/2 2/3 1/4 …
5/1 4/2 3/3 2/4 1/5 …
观察一下就很容易发现,第 i 行就一共有 i 个数
而且,由于这些数是Z字形编号的,所以奇数行和偶数行要分开讨论。
所以,代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int m;
cin>>m;
int i;
for(i=1;i<=1000000;i++){//判断m在第几行
if(m<=i){
break;
}
m-=i;
}
if(i%2==0) cout<<m<<"/"<<i+1-m;//偶数行情况
else cout<<i+1-m<<"/"<<m;//奇数行情况
return 0;//华丽的结尾
}
今天的题解就到这里,感谢大家的观看,我们下期再见!