1.(洛谷 P1008)将 1,2...9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数构成 1:2:3 的比例,试求出所有满足条件的三个三位数。
输入格式:
无
输出格式:
若干行,每行 3 个数字。按照每行第 1 个数字升序排列。
样例输入:
无
样例输出:
192 384 576
219 438 657
273 546 819
327 654 981
//1.(洛谷 P1008)将 1,2...9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数构成 1:2:3
//的比例,试求出所有满足条件的三个三位数。
public class Main {public static void main(String[] args) {for (int i = 123; i < 333; i++) {int a=i;int b=2*i;int c=3*i;boolean flag=false;flag=(a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==1*2*3*4*5*6*7*8*9&&(a/100)+(a/10%10)+(a%10)+(b/100)+(b/10%10)+(b%10)+(c/100)+(c/10%10)+(c%10)==1+2+3+4+5+6+7+8+9;if (flag){System.out.println(a+" "+b+" "+c);}}}
}
2.(洛谷 P4305)给定 n 个数,要求把其中重复的去掉,只保留第一次出现的数。
输入格式:本题有多组数据。第一行一个整数 T,表示数据组数。对于每组数据:第一行一个整数 n。第二行 n 个数,表示给定的数。输出格式:对于每组数据,输出一行,为去重后剩下的数,两个数之间用一个空格隔开。样例输入:2111 2 18 3 3 19 2 3 6 5 461 2 3 4 5 6样例输出:1 2 18 3 19 6 5 41 2 3 4 5 6
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
inline int read()
{
char c = getchar(); int x = 0, f = 1;
for (; !isdigit(c); c = getchar())if (c == '-')f = -1;
for (; isdigit(c); c = getchar())x = x * 10 + c - 48;
return x * f;
}
int T, n, x;
unordered_map<int, bool>s;//定义
void work()
{
s.clear();//清空
n = read();
For(i, 1, n) {
x = read();
if (!s[x]) {//没有的话,直接输出+标记掉。
printf("%d ", x);
s[x] = 1;
}
}puts("");//换行
}
int main()
{
T = read();
while (T--)work();
return 0;
}