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. P3244-[HNOI2015]落忆枫音【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3244 题目大意 给出一个\(\text{DAG}\),保证\(1\)可以到达所有点.然后再加入一条边(之后不一定 ...

  2. P3337-[ZJOI2013]防守战线【单纯形】

    正题 题目链接:https://www.luogu.com.cn/problem/P3337 题目大意 \(n\)个地方可以建立塔也可以不建立塔,第\(i\)个位置建立需要消耗\(C_i\)元 \(m ...

  3. python-docx 页面设置

    初识word文档-节-的概念 编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距.纸张方向.纸张大小4个,而在word中是以节(section)来分大的块,每一节的 ...

  4. HTML5元素背景知识

    目录 HTML5元素背景知识 语义与呈现分离 元素选用原则 少亦可为多 别误用元素 具体为佳,一以贯之 对用户不要想当然 元素说明体例 ol元素 元素速览 文档和元数据元素 文档和元数据元素 文本元素 ...

  5. 2020.12.3--vj个人赛补题

    A Vasya studies music.He has learned lots of interesting stuff. For example, he knows that there are ...

  6. mac无坑安装nginx

    mac无坑安装nginx 首先需要mac下有一个缺失的软件包的管理器------->homebrew 1.打开终端输入 brew update 说明homebrew已经安装好了 2.继续执行以下 ...

  7. 深入理解Java虚拟机之类加载机制篇

    概述 ​ 虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制. ​ 在Java语言里面,类型的 ...

  8. 【Spring】IoC容器 - 依赖查找

    前言 上一篇文章已经学习了[IoC的主要实现策略]有2种: 1.依赖查找 2.依赖注入 这里稍加详细的介绍一下依赖查找 1.依赖查找的方式 依赖查找的方式可以以多种维度来划分: 1.按名称/类型/注解 ...

  9. Vue CLI 5 和 vite 创建 vue3.x 项目以及 Vue CLI 和 vite 的区别

    这几天进入 Vue CLI 官网,发现不能选择 Vue CLI 的版本,也就是说查不到 vue-cli 4 以下版本的文档. 如果此时电脑上安装了 Vue CLI,那么旧版安装的 vue 项目很可能会 ...

  10. spring源码分析(二)- 容器基础

    1.基本用法 用过Spring的都知道,bean是Spring中最基础也是最核心的.首先看一个简单的例子. 一个类和一个配置文件 package bean; public class MyBean { ...