西安交通大学2020年编程题
#include<bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
//a、b、c、d是0到9的整数,abcd和cabd是两个四位数,
//把满足abcd+cabd=9012的a、b、c、d全部求出来。
//3 6 5 1
//5 3 6 1
#include <stdio.h>
int main1()
{
int i;
int a,b,c,d;
for(i=0;i<10000;i++)
{
a = i/1000;
b = (i-a*1000)/100;
c = (i - a*1000 - b*100)/10;
d = i - a*1000 - b*100 - c*10;
if((i + c*1000 + a*100 + b*10 + d) == 9012)
{
printf("%d %d %d %d\n",a,b,c,d);
}
}
return 0;
}
/*
第一行输入n;接下来n行每行输入n对整数。然后对于每一对整数,
如果它们的和的逆转等于逆转的和,则输出它们的和,否则输出NO。逆转的意思就是,比如说,123的逆转为321。
*/
//1 2 8 11 11
//8 2 1
//判断回文数
int checkNum(unsigned int num)
{
unsigned int temp,newNum=0;
temp=num;
while(num)
{
newNum*=10;
newNum=newNum+num%10;
num/=10;
}
return temp==newNum;
}
int main2()
{
int n;
scanf("%d",&n);
long long a;
long long res;
for(int i = 0;i<n;i++)
{
scanf("%d",&a);
res = 0;
while(a>10)
{
res += a%10;
a = a/10;
}
res+=a;
//printf("%d\n",res);
if(res<10 || checkNum(res))
{
printf("%d\n",res);
}
else
{
printf("NO!\n");
}
}
return 0;
}
//第一行输入n;接着来n行,分别输入a1、a2、……an,都是整数(范围在0到200之间)。
//输出和等于200的所有组合。
//回溯法
void f(int n,int *a,int *b)
{
static int n1 = 0;
static int n2 = -1;
int i;
int j;
for(i = n1;i < 10;i++)
{
if(n > a[i])
{
n1 = i+1;
n2++;
b[n2] = a[i];
n -= a[i];
f(n,a,b);
n += a[i];
n2--;
}
else if(n == a[i])
{
n2++;
b[n2] = a[i];
for(j = 0;j <= n2;j++)
{
printf("%d ",b[j]);
}
printf("\n");
n2--;
return;
}
else
{
return;
}
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
int b[n];
for(int i = 0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
f(200,a,b);
return 0;
}
保持好奇心!