pat 1023

数字翻倍排列验证
本文介绍了一个编程问题:检查一个给定的数字,在将其翻倍之后,所得的新数字是否仅由原数字的位数重新排列组成。文章提供了一段C语言代码实现,该程序能够接收一个不超过20位的正整数作为输入,并判断翻倍后的数字是否满足题目要求。

1023. Have Fun with Numbers (20)

时间限制
400 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!

Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.

Input Specification:

Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.

Output Specification:

For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.

Sample Input:
1234567899
Sample Output:
Yes
2469135798
 
 
 
 
#include <stdio.h>
#include <string.h>

char str[25];
int num[10], ans[25], num1[10];

int main()
{
	int i = 0, tmp, j;

	while(scanf("%s", str) != EOF)
	{
		memset(num, 0, sizeof(num));
		memset(ans, 0, sizeof(ans));
		memset(num1, 0, sizeof(num1));

		int len = strlen(str);

		for(i = 0; i < len; i++)
				num[str[i] - '0']++;

		for(i = len - 1, j = 0; i >= 0; i--, j++)
		{
				int tmp = str[i] - '0';
				tmp = 2 * tmp;
				ans[j] = tmp;
		}

		for(i = 0; i < j; i++)
		{
			if(ans[i] >= 10)
			{
				ans[i] = ans[i] % 10;
				ans[i+1]++;
			}
		}

		if(ans[i] == 0)
			i--;

		for(j = 0; j <= i; j++)
		{
			num[ans[j]]--;
		}

		for(i = 0; i < 10; i++)
			if(num[i] != 0)
				break;

		if(i < 10)
			printf("No\n");
		else
		{
			printf("Yes\n");
		}
		for(i = j - 1; i >= 0; i--)
			printf("%d", ans[i]);
		printf("\n");
	}
	return 0;
}


function copy-data([int]$startrow, [int]$startcol, [int]$endrow, [int]$endcol, [string]$pat, [string]$file, [int]$sheetfrom, [int]$sheetto) { $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $wb = $excel.Workbooks.Open($file) $wsfrom = $wb.Sheets.Item($sheetfrom) $wsto = $wb.Sheets.Item($sheetto) $sr = $wsfrom.Range($wsfrom.Cells.Item($startrow, $startcol), $wsfrom.Cells.Item($endrow, $endcol)) $fc = $sr.Find($pat) if ($fc -ne $null) { $rown = $fc.Row $dsr = $wsto.Range($wsto.Cells.Item($rown, $startcol), $wsto.Cells.Item($rown + ($endrow - $startrow), $endcol)) $dsr = $dsr.Resize($sr.Rows.Count, $sr.Columns.Count) $sr.Copy() $dsr.PasteSpecial(-4104) } $excel.DisplayAlerts = $false $wb.Close($true) [Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null } $path = $PWD.Path $file = "$path\a.xlsx" # 将sheet1中第1行到第4行、第2列到第9列的数据复制到sheet2中 copy-data -startrow 1 -startcol 2 -endrow 4 -endcol 9 -pat 1009 -file $file -sheetfrom 1 -sheetto 2 # 将sheet1中第6行到第8行、第2列到第9列的数据复制到sheet2中 copy-data -startrow 6 -startcol 2 -endrow 8 -endcol 9 -pat 1018 -file $file -sheetfrom 1 -sheetto 2 # 将sheet1中第10行到第11行、第2列到第9列的数据复制到sheet2中 copy-data -startrow 10 -startcol 2 -endrow 11 -endcol 9 -pat 1023 -file $file -sheetfrom 1 -sheetto 2 这个是搜索sheet1中关键词吗,我现在要搜索sheet2中关键词 得到行信息后再把sheet1指定内容复制到sheet2指定区域,怎么修改呢
05-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值