西安交通大学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;
}
posted @ 2020-09-26 23:14  Akmf's_blog  阅读(209)  评论(4编辑  收藏  举报