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. Go语言中的并发编程

    并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天) ...

  2. Python3入门系列之-----函数

    什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己 ...

  3. FastAPI(43)- 基于 pytest + requests 进行单元测试

    FastAPI 的单元测试 对于服务端来说,通常会对功能进行单元测试,也称白盒测试 FastAPI 集成了第三方库,让我们可以快捷的编写单元测试 FastAPI 的单元测试是基于 Pytest + R ...

  4. openlayer 4326与3857坐标互转之Java版

    public class Transform { private static final double PI = Math.PI; private static final double merca ...

  5. 数据库MHA原理

    一.数据库的高可用MHA (1):详细的步骤 1.master mysql宕机了,MHA manager :无法连接master 2.MHA在S1 S2找一个延迟最小的slave,确定为未来的mast ...

  6. 微服务架构理论&SpringCloud

    一.什么是微服务? 微服务是一种程序架构模式,它提倡将单体应用程序划分成若干的小服务模块,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制 ...

  7. PHP审计之PHP反序列化漏洞

    PHP审计之PHP反序列化漏洞 前言 一直不懂,PHP反序列化感觉上比Java的反序列化难上不少.但归根结底还是serialize和unserialize中的一些问题. 在此不做多的介绍. 魔术方法 ...

  8. .NET Reflector软件破解

    转自:https://blog.csdn.net/zxy13826134783/article/details/89057871 软件和注册机下载地址: 链接:https://pan.baidu.co ...

  9. C++ 与 Visual Studio 2019 和 WSL

    Visual Studio 使用 C++ 的 Linux 开发(WSL) https://devblogs.microsoft.com/cppblog/c-with-visual-studio-201 ...

  10. 编程题:X星人的金币

    X星人的金币 时问限制:3000MS 内存限制:589824KB 题目描述: X是人在一艘海底沉船上发现了很多很多很多金币.可爱的X星人决定用这些金币来玩一个填格子的游戏.其规则如下:第1个格子放2枚 ...