A - 排序

输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若
干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由
若干个‘0’组成的,这时这个整数就是0)。 你的任务是:对这些分割得到的整数,依从小
到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

Output

对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。

Sample Input

0051231232050775

Sample Output

0 77 12312320

WrongAnswer

#include <stdio.h>
#include <string.h>
int main() {
char str[10000];
long len;
int min,temp;
while(scanf("%s",str)!=EOF){
int i,j=0,k,p=0;
int a[10000]={0};
len=strlen(str);
for(i=0;i<len;i++){
if((i!=0&&str[i]=='5')||(i==len-1&&str[i]!='5')) {
for(k=j;k<=i;k++){
if(str[k]=='5') continue;
a[p]=a[p]*10+(str[k]-'0');
}
j=i+1;
p++;
} }
for(i=0;i<p;i++){
min=i;
for(j=i+1;j<p;j++)
if(a[j]<a[min])
{
min=j;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=0;i<p;i++){
printf("%d",a[i]);
if(i!=p-1) printf(" ");
else printf("\n");
}}
return 0;
}

错误原因:忽略了如果输入字符串为如55512355的情况(有多个连续5),如果这样会导致p自增多次,从而造成,结果输出多个0;

修改:增加一个变量flag,控制p自增;

Accepted

#include <stdio.h>
#include <string.h>
int main() {
char str[10000];
long len;
int min,temp;
while(scanf("%s",str)!=EOF){
int i,j=0,k,p=0;
int a[10000]={0};
len=strlen(str);
for(i=0;i<len;i++){
int flag=0;//注意!!
if((i!=0&&str[i]=='5')||(i==len-1&&str[i]!='5')) {
for(k=j;k<=i;k++){
if(str[k]=='5') continue;
else {flag=1; a[p]=a[p]*10+(str[k]-'0');}//注意!!
}
j=i+1;
if(flag==1) p++;
} }
for(i=0;i<p;i++){
min=i;
for(j=i+1;j<p;j++)
if(a[j]<a[min])
{
min=j;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=0;i<p;i++){
printf("%d",a[i]);
if(i!=p-1) printf(" ");
else printf("\n");
}}
return 0;
}

B - 18岁生日

Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出
生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你
帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

Input

一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

Output

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

Sample Input

1
1988-03-07

Sample Output

6574

Accepted

#include <stdio.h>
#include <string.h>
int judge_year(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0)) return 1;
else return 0;
}
int main() {
int t,i,y;
int year,month,day;
int sum=0;
scanf("%d",&t);
for(i=1;i<=t;i++){
sum=0;
scanf("%d-%d-%d",&year,&month,&day);
if(month==2&&day==29) {printf("-1\n");continue;}
else if (month<3) {//如果出生在3月份之前,当前年的天数,就是到第二年生日的天数
for(y=year;y<=year+17;y++){
if(judge_year(y)) sum+=366;
else sum+=365;
}
}
else if(month>=3){//如果出生在3月份之后,后一年的天数,就是到第二年生日的天数
for(y=year+1;y<=year+18;y++){
if(judge_year(y)) sum+=366;
else sum+=365;
}
}
printf("%d\n",sum); }
return 0;
}

C - 七夕节

七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的
另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:
数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?



Input

输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只
有一个数字N(1<=N<=500000).

Output

对于每组测试数据,请输出一个代表输入数据N的另一半的编号.

Sample Input

3
2
10
20

Sample Output

1
8
22

WrongAnswer

#include <stdio.h>
int main(){
int t,n,m=0,i,j;
scanf("%d",&t);
for(i=1;i<=t;i++){
m=0;
scanf("%d",&n);
for(j=1;j<n;j++){
if(n%j==0) m+=j;
}
printf("%d\n",m);
}
return 0;
}

刚刚开始想法很简单,用一个for循环把n所有的因子找出来,但是提交发现,超时,说明这种做法当数据过大时,消耗时间过大,因此就转换了另一种思路。[参考] C语言-求因子和

Accepted

#include <math.h>
int main(){
int t,n,m=0,i,j;
scanf("%d",&t);
for(i=1;i<=t;i++){
m=0;
scanf("%d",&n);
for(j=1;j<=sqrt(n);j++){
if(n%j==0){
if(j==n/j) m+=j;
else m=m+j+n/j;
}
}
m=m-n;
printf("%d\n",m);
}
return 0;
}

E - A + B

读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.

Input

测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.
当A和B同时为0时输入结束,相应的结果不要输出.

Output

对每个测试用例输出1行,即A+B的值.

Sample Input

one + two =
three four + five six =
zero seven + eight nine =
zero + zero =

Sample Output

3
90
96

Accepted

#include <stdio.h>
#include <string.h>
int judge(char str[]){
if(!strcmp(str,"zero")) return 0;
else if(!strcmp(str,"one")) return 1;
else if(!strcmp(str,"two")) return 2;
else if(!strcmp(str,"three")) return 3;
else if(!strcmp(str,"four")) return 4;
else if(!strcmp(str,"five")) return 5;
else if(!strcmp(str,"six")) return 6;
else if(!strcmp(str,"seven")) return 7;
else if(!strcmp(str,"eight")) return 8;
else if(!strcmp(str,"nine")) return 9;
else return 0;
}
int main(){
while(1){
int sum1=0,sum2=0,sum=0;
char str1[1005]={0};
int i=0,j=0;
int len=0;
while(1){
scanf("%c",&str1[i]);
if(str1[i]=='\n') break; //这一步非常关键,刚开始,我选择条件为’=‘时,就会导致后续输入的例子,不能完整得出原数, 原因为,输入的’\n‘被字符串接收了,从而导致后面的字符无法得出对应数字.
if(str1[i]==' ') {
str1[i]=0;
sum1=sum1*10+judge(str1);
len=(int)strlen(str1);
for(j=0;j<len;j++) str1[j]=0;
i=-1;
}
if(str1[i]=='+') {
sum2=sum1;
sum1=0;
continue;}
i++;
}
sum=sum1+sum2;
if(sum==0) break;
else printf("%d\n",sum);
}
return 0;
}

J - 前m大的数

还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张
数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答
案中最大的M个数告诉她就可以了。 给定一个包含N(N<=3000)个正整数的序列,每个数不超过
5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的
顺序排列。

Input

输入可能包含多组数据,其中每组数据包括两行:
第一行两个数N和M,
第二行N个数,表示该序列。

Output

对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。

Sample Input

4 4
1 2 3 4
4 5
5 3 6 4

Sample Output

7 6 5 5
11 10 9 9 8

Time Limit Exceeded

#include <stdio.h>
#include <math.h>
int main(){
int m,n,a[1005],b[1005];
int i,j,k,temp;
while(scanf("%d %d",&n,&m)!=EOF){
k=0;
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++){
for(j=i+1;j<n;j++,k++) b[k]=a[i]+a[j];
}
for(i=0;i<k;i++){
for(j=i+1;j<k;j++){
if(b[i]<b[j]){
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
for(i=0;i<m;i++){
printf("%d",b[i]);
if(i!=m-1) printf(" ");
else printf("\n");
}
} return 0;
}

第一次提交超时了,所以在想,会不会是在排序上花的时间过长,所以就采取了c++sort 函数(默认升序排列)

#include <stdio.h>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{return a>b;}
int main(){
int m,n;
int i,j,k;
while(scanf("%d %d",&n,&m)!=EOF){
k=0;
int a[1000005]={0},b[1000005]={0};
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++){
for(j=i+1;j<n;j++,k++) b[k]=a[i]+a[j];
}
sort(b,b+k,compare);
for(i=0;i<m-1;i++)
printf("%d ",b[i]);
printf("%d\n",b[m-1]);
}
return 0;
}

但是有发现,还是Runtime error了,之后在查询资料后,发现是数组开的过小,使其溢出,但是如果在main函数里定义数组过大,会使栈溢出,故设全局变量。

Accepted

#include <stdio.h>
#include<algorithm>
int a[3005]={0},b[4500005]={0};
using namespace std;
bool compare(int a,int b)
{return a>b;}
int main(){
int m,n;
int i,j,k; while(scanf("%d %d",&n,&m)!=EOF){
k=0;
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<n;i++){
for(j=i+1;j<n;j++) b[k++]=a[i]+a[j];
}
sort(b,b+(n*(n-1)/2),compare);
for(i=0;i<m-1;i++)
printf("%d ",b[i]);
printf("%d\n",b[m-1]);
}
return 0;
}

后面也了解了相关原理:常用的两种nlogn级别的排序——快排,归排

K - 找新朋友

新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编
号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于
1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计
算出来。

Input

第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。

Output

对于每一个N,输出一行新朋友的人数,这样共有CN行输出。

Sample Input

2
25608
24027

Sample Output

7680
16016

Time Limit Exceeded

#include <stdio.h>
int find(int a,int b){
if(b==0&&a!=1) return 1;
if(b==0&&a==1) return 0;
return find(b,a%b); }
int main(){
int n,cn,i,j;
int num,flag;
scanf("%d",&cn);
for(i=1;i<=cn;i++){
num=0;
scanf("%d",&n);
for(j=1;j<n;j++){
flag=find(n,j);
if(flag==0) num++;
}
printf("%d\n",num);
}
return 0;
}

一开始想到了gcd,但是gcd函数采用递归的方法,所以是遍历查找,故会超时。

Accepted

查询资料后,发现本题应该用筛选法处理(还有一个欧拉公式??)

#include<stdio.h>
#include<math.h>
int main()
{
int a[32770];
int i,j,cn,n;
scanf("%d",&cn);
while(cn--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));// memset可以方便的清空一个结构类型的变量或数组。
for(i=2;i<=sqrt(n);i++) //筛选法求约数关系
if(n%i==0)
for(j=i;j<n;j+=i)
a[j]=1;
int sum=0;
for(i=1;i<n;i++)
if(!a[i])
sum++;
printf("%d\n",sum);
}
return 0;
}
#include <stdio.h>
#include <math.h>
int Eular(int n)
{
int ans=1;
for (int i=2;i<=sqrt((double)n);i++)
{
if (n%i==0)
{
n/=i;
ans*=(i-1);
//若n有个因子是i的k次,根据欧拉公式有下面的代码
while (n%i==0)
{
n/=i;
ans*=i;
}
}
}
if (n>1) //若最后剩的数为大于5的素数,根据欧拉公式再算进去
ans*=(n-1);
return ans;
}
int main(){
int n,cn,i;
scanf("%d",&cn);
for(i=1;i<=cn;i++){
scanf("%d",&n);
printf("%d\n", Eular(n));
}
return 0;
}

M - 测试你是否和LTC水平一样高

大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个
水平线上! 你的任务是: 计算方程x^2+y^2+z^2= num的一个正整数解。

Input

输入数据包含多个测试实例,每个实例占一行,仅仅包含一个小于等于10000的正整数num。

Output

对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解,每个实例的输出占一行,题目保证所有测试数据都有解。

Sample Input

3

Sample Output

1 1 1

Accepted

这题首先注意输入n的范围1~10000,所以只要在1~100范围内三层循环嵌套,便可得出答案

#include<stdio.h>
#include<math.h>
int main()
{
int num,i,k,j,flag;
while(scanf("%d",&num)!=EOF){
flag=0;
for(i=1;i<=100;i++){
for(j=1;j<=100;j++){
for(k=1;k<=100;k++){
if(i*i+j*j+k*k==num) {flag=1;break;}
}
if(flag) break;
}
if(flag) break;
}
printf("%d %d %d\n",i,j,k);
}
return 0;
}

N - 素数回文

xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在
xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间
满足条件的数。(5 <= a < b <= 100,000,000);

Input

这里有许多组数据,每组包括两组数据a跟b。

Output

对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。

Sample Input

5 500

Sample Output

5
7
11
101
131
151
181
191
313
353
373
383

Time Limit Exceeded

#include<stdio.h>
#include<math.h>
int judge1(int n){
int i;
if(n==1) return 0;
else if(n==2) return 1;
else if(n>2) {
for (i=2;i<=sqrt(n);i++ ) {
if(n%i==0) return 0;
}
return 1;
}
return 0;
}
int judge2(int n){
int s,m=0;
s=n;
while(s>0){
m=m*10+s%10;
s/=10;
}
if(m==n) return 1;
else return 0;
}
int main()
{
int a,b,i,temp;
while(scanf("%d %d",&a,&b)!=EOF){
int flag1=0,flag2=0;
if(a>b){
temp=a;
a=b;
b=temp;
}
for(i=a;i<=b;i++){
flag1=judge1(i);
flag2=judge2(i);
if(flag1&&flag2)printf("%d\n",i);
}
}
return 0;
}

Accepted

回文素数:除了11,偶数位的数不存在回文质数。4位,6位,8位……数不存在回文质数。因为四位及四位以上的偶数位的回文数都可以被11整除,故不存在偶数位的回文质数。

方法1:暴力打表(因为范围内的最大回文素数为9989899)

#include<stdio.h>
int arr[]={2,3,5,7,11,101,131,151,181,191,
313,353,373,383,727,757,787,797,919,929,
10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,
13931,14341,14741,15451,15551,16061,16361,16561,16661,17471,
17971,18181,18481,19391,19891,19991,30103,30203,30403,30703,
30803,31013,31513,32323,32423,33533,34543,34843,35053,35153,
35353,35753,36263,36563,37273,37573,38083,38183,38783,39293,
70207,70507,70607,71317,71917,72227,72727,73037,73237,73637,
74047,74747,75557,76367,76667,77377,77477,77977,78487,78787,
78887,79397,79697,79997,90709,91019,93139,93239,93739,94049,
94349,94649,94849,94949,95959,96269,96469,96769,97379,97579,
97879,98389,98689,1003001,1008001,1022201,1028201,1035301,1043401,1055501,
1062601,1065601,1074701,1082801,1085801,1092901,1093901,1114111,1117111,1120211,
1123211,1126211,1129211,1134311,1145411,1150511,1153511,1160611,1163611,1175711,
1177711,1178711,1180811,1183811,1186811,1190911,1193911,1196911,1201021,1208021,
1212121,1215121,1218121,1221221,1235321,1242421,1243421,1245421,1250521,1253521,
1257521,1262621,1268621,1273721,1276721,1278721,1280821,1281821,1286821,1287821,
1300031,1303031,1311131,1317131,1327231,1328231,1333331,1335331,1338331,1343431,
1360631,1362631,1363631,1371731,1374731,1390931,1407041,1409041,1411141,1412141,
1422241,1437341,1444441,1447441,1452541,1456541,1461641,1463641,1464641,1469641,
1486841,1489841,1490941,1496941,1508051,1513151,1520251,1532351,1535351,1542451,
1548451,1550551,1551551,1556551,1557551,1565651,1572751,1579751,1580851,1583851,
1589851,1594951,1597951,1598951,1600061,1609061,1611161,1616161,1628261,1630361,
1633361,1640461,1643461,1646461,1654561,1657561,1658561,1660661,1670761,1684861,
1685861,1688861,1695961,1703071,1707071,1712171,1714171,1730371,1734371,1737371,
1748471,1755571,1761671,1764671,1777771,1793971,1802081,1805081,1820281,1823281,
1824281,1826281,1829281,1831381,1832381,1842481,1851581,1853581,1856581,1865681,
1876781,1878781,1879781,1880881,1881881,1883881,1884881,1895981,1903091,1908091,
1909091,1917191,1924291,1930391,1936391,1941491,1951591,1952591,1957591,1958591,
1963691,1968691,1969691,1970791,1976791,1981891,1982891,1984891,1987891,1988891,
1993991,1995991,1998991,3001003,3002003,3007003,3016103,3026203,3064603,3065603,
3072703,3073703,3075703,3083803,3089803,3091903,3095903,3103013,3106013,3127213,
3135313,3140413,3155513,3158513,3160613,3166613,3181813,3187813,3193913,3196913,
3198913,3211123,3212123,3218123,3222223,3223223,3228223,3233323,3236323,3241423,
3245423,3252523,3256523,3258523,3260623,3267623,3272723,3283823,3285823,3286823,
3288823,3291923,3293923,3304033,3305033,3307033,3310133,3315133,3319133,3321233,
3329233,3331333,3337333,3343433,3353533,3362633,3364633,3365633,3368633,3380833,
3391933,3392933,3400043,3411143,3417143,3424243,3425243,3427243,3439343,3441443,
3443443,3444443,3447443,3449443,3452543,3460643,3466643,3470743,3479743,3485843,
3487843,3503053,3515153,3517153,3528253,3541453,3553553,3558553,3563653,3569653,
3586853,3589853,3590953,3591953,3594953,3601063,3607063,3618163,3621263,3627263,
3635363,3643463,3646463,3670763,3673763,3680863,3689863,3698963,3708073,3709073,
3716173,3717173,3721273,3722273,3728273,3732373,3743473,3746473,3762673,3763673,
3765673,3768673,3769673,3773773,3774773,3781873,3784873,3792973,3793973,3799973,
3804083,3806083,3812183,3814183,3826283,3829283,3836383,3842483,3853583,3858583,
3863683,3864683,3867683,3869683,3871783,3878783,3893983,3899983,3913193,3916193,
3918193,3924293,3927293,3931393,3938393,3942493,3946493,3948493,3964693,3970793,
3983893,3991993,3994993,3997993,3998993,7014107,7035307,7036307,7041407,7046407,
7057507,7065607,7069607,7073707,7079707,7082807,7084807,7087807,7093907,7096907,
7100017,7114117,7115117,7118117,7129217,7134317,7136317,7141417,7145417,7155517,
7156517,7158517,7159517,7177717,7190917,7194917,7215127,7226227,7246427,7249427,
7250527,7256527,7257527,7261627,7267627,7276727,7278727,7291927,7300037,7302037,
7310137,7314137,7324237,7327237,7347437,7352537,7354537,7362637,7365637,7381837,
7388837,7392937,7401047,7403047,7409047,7415147,7434347,7436347,7439347,7452547,
7461647,7466647,7472747,7475747,7485847,7486847,7489847,7493947,7507057,7508057,
7518157,7519157,7521257,7527257,7540457,7562657,7564657,7576757,7586857,7592957,
7594957,7600067,7611167,7619167,7622267,7630367,7632367,7644467,7654567,7662667,
7665667,7666667,7668667,7669667,7674767,7681867,7690967,7693967,7696967,7715177,
7718177,7722277,7729277,7733377,7742477,7747477,7750577,7758577,7764677,7772777,
7774777,7778777,7782877,7783877,7791977,7794977,7807087,7819187,7820287,7821287,
7831387,7832387,7838387,7843487,7850587,7856587,7865687,7867687,7868687,7873787,
7884887,7891987,7897987,7913197,7916197,7930397,7933397,7935397,7938397,7941497,
7943497,7949497,7957597,7958597,7960697,7977797,7984897,7985897,7987897,7996997,
9002009,9015109,9024209,9037309,9042409,9043409,9045409,9046409,9049409,9067609,
9073709,9076709,9078709,9091909,9095909,9103019,9109019,9110119,9127219,9128219,
9136319,9149419,9169619,9173719,9174719,9179719,9185819,9196919,9199919,9200029,
9209029,9212129,9217129,9222229,9223229,9230329,9231329,9255529,9269629,9271729,
9277729,9280829,9286829,9289829,9318139,9320239,9324239,9329239,9332339,9338339,
9351539,9357539,9375739,9384839,9397939,9400049,9414149,9419149,9433349,9439349,
9440449,9446449,9451549,9470749,9477749,9492949,9493949,9495949,9504059,9514159,
9526259,9529259,9547459,9556559,9558559,9561659,9577759,9583859,9585859,9586859,
9601069,9602069,9604069,9610169,9620269,9624269,9626269,9632369,9634369,9645469,
9650569,9657569,9670769,9686869,9700079,9709079,9711179,9714179,9724279,9727279,
9732379,9733379,9743479,9749479,9752579,9754579,9758579,9762679,9770779,9776779,
9779779,9781879,9782879,9787879,9788879,9795979,9801089,9807089,9809089,9817189,
9818189,9820289,9822289,9836389,9837389,9845489,9852589,9871789,9888889,9889889,
9896989,9902099,9907099,9908099,9916199,9918199,9919199,9921299,9923299,9926299,
9927299,9931399,9932399,9935399,9938399,9957599,9965699,9978799,9980899,9981899,
9989899,-1};
int main()
{
int a,b,i;
while(scanf("%d %d",&a,&b)!=EOF){
for(i=0;arr[i]!=-1;i++)
{
if(arr[i]>=a&&arr[i]<=b) printf("%d\n",arr[i]);
if(arr[i]>b) break;
}
printf("\n");
}
return 0;
}

方法2 HDU 1431 素数回文(打表+技巧,最大回文素数为9989899!!!)

P - 排列2

Ray又对数字的列产生了兴趣:现有四张卡片,用这四张卡片能排列出很多不
同的4位数,要求按从小到大的顺序输出这些4位数。

Input

每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。

Output

对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在
同一行,同一行中每个四位数间用空格分隔。 每组输出数据间空一行,最后一组数据后面
没有空行。

Sample Input

1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0

Sample Output

1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321 1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211 1023 1032 1203 1230 1302 1320
2013 2031 2103 2130 2301 2310
3012 3021 3102 3120 3201 3210

Accepted

本题采用c++stl库中的全排列(全排列 next_permutation() 函数的用法)函数:

#include<stdio.h>
#include<string.h>
#include<algorithm>
int main()
{
int a[5];
int tag=0;
while(scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3])){
if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0) break;
if(tag) printf("\n"); //控制换行
tag=1;
int flag=1,temp;
do{
if(a[0]==0) continue;
if(flag){
printf("%d%d%d%d",a[0],a[1],a[2],a[3]);
flag=0;
}
else if(temp==a[0])
printf(" %d%d%d%d",a[0],a[1],a[2],a[3]);
else printf("\n%d%d%d%d",a[0],a[1],a[2],a[3]);
temp=a[0];}while(std::next_permutation(a,a+4));
printf("\n");
}
return 0;
}

FZU ICPC 2020 寒假训练 2的更多相关文章

  1. FZU ICPC 2020 寒假训练 4 —— 模拟(一)

    P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...

  2. FZU ICPC 2020 寒假训练 6 —— 字符串处理

    P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...

  3. FZU ICPC 2020 寒假训练 5 —— 排序

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...

  4. FZU ICPC 2020 寒假训练 4 —— 模拟(二)

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

  5. FZU ICPC 2020 寒假训练 3

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...

  6. FZU ICPC 2020 寒假训练 1

    B - Sum Problem In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. Input The i ...

  7. FZU ICPC 2020 寒假阶段测试 2

    P1464 Function 题目描述 对于一个递归函数w(a,b,c)如果a≤0 or b≤0 or c≤0就返回值1.如果a>20 or b>20 or c>20就返回w(20, ...

  8. 寒假训练第九场 Brocard Point of a Triangle

    题意:求布洛卡点坐标 思路:直接利用布洛卡点的性质.http://pan.baidu.com/s/1eQiP76E #include<cstdio> #include<cstring ...

  9. FJUT2017寒假训练二题解

    A题 题意:让你找出唯一的一个四位数,满足对话时的要求. 思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not s ...

随机推荐

  1. 10-Java中共享内存可见性以及synchronized和volatile关键字

    Java中共享变量的内存可见性 我们首先来看一下在多线程下处理共享变量时Java的内存模型,如图所示 Java内存模型规定,将所有的变量都存放在主存中,当线程使用变量的时候,会把主内存里面的变量赋值到 ...

  2. 【vue】使用 Video.js 播放视频

    目录 安装 引入 使用 参考文档 环境: vue 2.0+ element ui (这里的代码用了elmentui的按钮样式,可以不用elment ui的样式) 安装 在项目中安装 video.js. ...

  3. Python笔记_1语法总结

    前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...

  4. bzoj2064分裂(dp)

    题目大意: 给定一个初始集合和目标集合,有两种操作:1.合并集合中的两个元素,新元素为两个元素之和 2.分裂集合中的一个元素,得到的两个新元素之和等于原先的元素.要求用最小步数使初始集合变为目标集合, ...

  5. 如何查找一个目录中所有c文件的总行数

    如何查找一个目录中所有c文件的行数 面试题问到了一题,如何统计wc文件夹下所有文件的行数,包括了子目录. 最后在 https://blog.csdn.net/a_ran/article/details ...

  6. Pytorch——张量 Tensors

    张量 Tensors 1.torch.is_tensor torch.is_tensor(obj) 用法:判断是否为张量,如果是 pytorch 张量,则返回 True. 参数:obj (Object ...

  7. 远程设备管理opendx平台搭建-appium和adb的安装

    多年不见了,说起来也有3年了我又开始写博客了,这几年我还是没啥长进,还是干测试,但是测试行业的话,我已经成了一个测开了,也在搭建自己的测试网站 本系列文章讲述的是一个系列的第一部分,最终可以搭建一整套 ...

  8. 脚本注入3(blind)

    布尔盲注适用于任何情况回显都不变的情况. (由此,可以看出,回显啥的其实都不重要,最重要的是判断注入点.只要找到注入点了,其他的都是浮云.) 在操作上,时间盲注还稍微简单一点:它不需要像布尔盲注那样, ...

  9. logstash multi pipeline的使用

    logstash multi pipeline的使用 一.背景 二.解决方案 1.方案一: 2.方案二: 3.方案三: 三.实现步骤 1.编写 pipeline 文件 1.从文件收集,输出到控制台 2 ...

  10. 数组中的逆序对 牛客网 剑指Offer

    数组中的逆序对 牛客网 剑指Offer 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对10000000 ...