zoukankan      html  css  js  c++  java
  • 2019 年百度之星·程序设计大赛

    题目链接

    1001 度度熊与数字(签到题)

    Accepts: 3638

    Submissions: 7683

    Time Limit: 2000/1000 MS (Java/Others)

    Memory Limit: 32768/32768 K (Java/Others)

    Problem Description

    度熊发现,1, 3 以及 9 这三个数字很神奇,它们的所有的倍数的每位数字的和一定是自己的倍数。例如说: 54是 3 的倍数,同时 5+4=9 也是 3 的倍数。在另一个例子 666666 是 9 的倍数,同时 6+6+6=18 也是 9 的倍数。

    度熊又发现,除了 1, 3, 9 以外的的正整数,虽然并不满足"所有的倍数的每位数字的和一定是自己的倍数",但也存在一些数是它们的倍数且各位数字和也是它们的倍数。例如说,888 是 12 的倍数,且他的各位数字和 8+8+8=24 也是 12 的倍数。

    现在度熊想知道,给你一个正整数 V,是否存在一个数 x,使得 V 是 x 的倍数,同时它的每位数字的和也是 x 的倍数呢?请找出所有这样的数 x。

    Input

    有多组询问,第一行包含一个正整数 T 代表有几组询问,接着每组测试数据占一行,包含一个正整数 V。

    • 1≤T≤1001

    • 1≤V≤10^9

    Output

    对于每一个询问,输出两行,第一行包含一个正整数 m,m 代表对于该询问的 V,有几个满足条件的 x。第二行输出 m 个数,把所有满足条件的 x 由小到大输出。

    Sample Input

    3
    1
    9
    666666

    Sample Output

    1
    1
    3
    1 3 9
    6
    1 2 3 6 9 18
    
    

    解题思路:

    把给出的数各位上的数加一下,从1开始判断,如果两个都能整除,就输出。

    #include <stdio.h>
    int ans[100]; 
    int f(int n)
    {
    	int ans=0;
    	while(n)
    	{
    		ans+=n%10;
    		n/=10;
    	}
    	return ans; 
    } 
    int main()
    {
    	int t, len, sum, n;
    	scanf("%d", &t);
    	while(t--)
    	{
    		scanf("%d", &n);
    		len=0;
    		sum=f(n);
    		for(int i=1; i<=sum; i++)
    			if(sum%i==0 && n%i==0)
    				ans[++len]=i;
    		printf("%d
    ", len);
    		for(int i=1; i<len; i++)
    			printf("%d ", ans[i]);
    		printf("%d
    ", ans[len]);
    	}
    	return 0;
    }

    1002 度度熊与排列(暴力)

    Accepts: 1100

    Submissions: 3486

    Time Limit: 2000/1000 MS (Java/Others)

    Memory Limit: 32768/32768 K (Java/Others)

    Problem Description

    度熊有一个机器,这个机器有一个 1∼M 的排列 p[1..M]当作参数,若丢进一个长度为 M 的字符串,此机器会将此字符串重新排列后再输出,重新排列的方式为:原本第 iii 个位置的字符会变到第 p[i] 个位置。

    举例来说,当 M=3,p[1]=3,p[2]=1,p[3]=2,那么丢 "abc" 进入这个机器后,机器会输出"bca";若丢进的是 "ded",那么机器会输出 "edd"。

    某天,度熊不小心忘记这个机器的参数了,只记得参数的长度是 M,于是他丢了 N 长度为 M 的字符串进去,并记录下对于每个字符串机器的输出结果,请你根据这些结果,帮度熊找回这个机器的参数。若有多组参数都满足度熊的记录,请输出字典序最小的排列作为参数。若并不存在任何参数满足度熊的记录,请输出 −1。

    注:对于两个相异的排列a: a[1..M]和 b[1..M],我们称 a 比 b 小当且仅当 存在一个 i,满足对于所有小于 i 的 j 都有 aj=bj​​ 且 ai<bi​​。

    Input

    有多组询问,第一行包含一个正整数 T 代表有几组询问。

    每组询问的第一行包含两个正整数 N,M,分别代表度熊丢进机器的字符串数目以及参数的长度。接下来还有 2×N 行,每行有一个长度为 M 的字符串,当中的第 2×i−1 行的字符串代表度熊丢进去机器的第 i 个字符串,而第 2×i行的字符串代表机器对于第 iii 个字符串的输出结果。

    • 1≤T≤100

    • 1≤N≤20

    • 1≤M≤50

    • 字符串由英文小写字母('a' 至 'z') 组成

    Output

    对于每一个询问,输出一行,若不存在任何参数满足度熊的记录,这行只包含一个整数 −1。否则这行包含一个排列,代表此机器所有可能的参数中字典序最小的那个。

    Sample Input

    4
    1 3
    abc
    bca
    2 4
    aaab
    baaa
    cdcc
    cccd
    3 3
    aaa
    aaa
    bbb
    bbb
    ccc
    ccc
    1 1
    a
    z

    Sample Output

    3 1 2
    2 4 3 1
    1 2 3
    -1
    
    Note
    第一组询问中, p[1]=3,p[2]=1,p[3]=2,是唯一的机器可能的参数。
    
    第二组询问中, p=[2,4,3,1]和 p=[3,4,2,1]都是机器可能的参数,不过 [2,4,3,1] 的字典序比 [3,4,2,1] 还小,故必须输出 2,4,3,1。 

    解题思路:

    对于这道题,可以先暴力找第一个字符串第一个字符的排列,如果后面每一个字符串的变换都符合规则,可以确定第一个数,之后再判断第二个字符,之后再判断一下是否所有的字符都找到了排列,输出即可。

    #include <stdio.h>
    #include <string.h>
    char str1[55][55], str2[55][55];
    int ans[55];
    bool book[55];
    int main()
    {
    	int n, m, t, zt;
    	scanf("%d", &t);
    	while(t--)
    	{
    		scanf("%d%d", &n, &m);
    		for(int i=1; i<=n; i++)
    			scanf("%s%s", str1[i], str2[i]);
    		memset(book, false, sizeof(book));
    		for(int i=0; i<m; i++)
    		{
    			zt=0;
    			for(int j=0; j<m; j++)
    			{
    				if(str1[1][i]==str2[1][j] && book[j]==false)
    				{
    					int temp=1;
    					for(int k=2; k<=n; k++)
    					{
    						if(str1[k][i]!=str2[k][j])
    						{
    							temp=0;
    							break;
    						}
    					}
    					if(temp==1)
    					{
    						book[j]=true;
    						zt=1;
    						ans[i]=j+1;
    						break;
    					}
    				} 
    			}
    			if(zt==0)
    				break;
    		}
    		if(zt==0)
    			printf("-1
    ");
    		else {
    			for(int i=0; i<m-1; i++)
    				printf("%d ", ans[i]);
    			printf("%d
    ", ans[m-1]);
    		}			
    	}	
    	return 0;
    }
  • 相关阅读:
    nodeName,nodeValue未知 xml 入库方案 The ElementTree iterparse Function
    如何:执行大型 XML 文档的流式转换 大XML文件解析入库的一个方法
    python curl_get-pip.py Installing with get-pip.py
    iptables List the rules in a chain or all chains
    goroutine 分析 协程的调度和执行顺序 并发写 run in the same address space 内存地址 闭包 存在两种并发 确定性 非确定性的 Go 的协程和通道理所当然的支持确定性的并发方式(
    数据库业界
    The MEAN stack is a modern replacement for the LAMP (Linux, Apache, MySQL, PHP/Python) stack
    Using Groovy To Import XML Into MongoDB
    虚拟机网络模式 桥接 网桥 交换机
    防止有内存泄漏并尽可能快地释放所有内存是内存管理的重要组成部分 长时间运行进程的内存泄漏
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852503.html
Copyright © 2011-2022 走看看