Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 4213 | Accepted: 2023 |
Description
Input
Output
Sample Input
3 9 5 20
Sample Output
empty 9 1,3 91,9 3,27
个人理解:
1.根据题目理解题意,由于原题是英文而且太长,所以不好理解,下面是我的理解着大批的简单版。
天平砝码放置,有重量为1、3、9、27、81 .. 3^K... 3^19 砝码,天平左边给定一个重量值w (1=< w <= (3^20-1)/2 ),求如何摆放砝码使天平两端达到平衡。(题目文字太复杂了!)。
2. 注意题目对输出形式的要求,之前输出中有多加入“/n”,就不能通过。
3.对题目中的memset()函数,
void *memset(void *s, int ch, size_t n); 函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。(代码时我在百度搜索得到的结果,然后再自己根据题目意思一句一句理解来的,所以其中的一些我没有学习到的知识点,我都有自己百度。)
结果 时间 内存 语言 Accepted 16 156 C 代码:
#include<stdio.h> #include<string.h> void solve(int n) { int i,k=n,left[100],right[100],tt; int a[200]; memset(a,0,sizeof(a));//将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。 i=0; while(k!=0) { a[i++]=k%3; k=k/3; } for(k=0;k<i;k++) if(a[k]==3) { a[k]=0;a[k+1]++;} else if(a[k]==2) { a[k]=-1;a[k+1]++;} tt=1; int li=0,ri=0; for(k=0;k<=i;k++) { if(a[k]==-1) left[++li]=tt; else if(a[k]==1) right[++ri]=tt; tt*=3; } if(li==0) { printf("empty "); for(i=1;i<ri;i++) printf("%d,",right[i]); printf("%d",right[ri]); } else { for(i=1;i<li;i++) printf("%d,",left[i]); printf("%d ",left[li]); for(i=1;i<ri;i++) printf("%d,",right[i]); printf("%d",right[ri]); } } int main() { int i,t; int n; scanf("%d",&t); while(t--) { scanf("%d",&n); solve(n); } return 0; }