"Perhaps the prettiest number system of all... is the balanced ternary notation."——Donald Knuth
平衡三进制(balanced ternary notation),是一种以3为基数,-1(以下用T表示)、0、1为基本数码的进制。
例题:砝码问题
解法1:
枚举
#include
using namespace std;
int main(){/*
*-1,0,1 represent 3 status
*/int testNum=7;
int w1=1;
int w2=3;
int w3=9;
int w4=27;
int w5=81;
for (int i=-1;
i<=1;
i++) {
for (int j=-1;
j<=1;
j++) {
for (int k=-1;
k<=1;
k++) {
for (int m=-1;
m<=1;
m++) {
for (int n=-1;
n<=1;
n++) {
int tmp=w1*i+w2*j+w3*k+w4*m+w5*n;
if (tmp==testNum) {
cout<
解法2:
使用平衡三进制
#include
using namespace std;
int main(){cout<<"pls input one number between 1 and 121"<>input_Number;
if (input_Number<0||input_Number>121) {
cout<<"pls input the right number between 1 and 121"<=0;
i--) {
cout<
输出所有情况
#include
using namespace std;
int main(){int len=0,a[10]={0},j;
char op[10];
int t,k,m,input,i;
for(j=1;
j<=122;
j++)
{
input=j;
m=j;
len=0;
t=1;
while(input)
{
k=input%3;
input/=3;
//关键是这里的两步
switch(k)
{
case 0:break;
case 1:a[len]=t;
op[len++]='+';
break;
case 2:a[len]=t;
op[len++]='-';
input++;
break;
}
t*=3;
}
printf("%d=%d",m,a[len-1]);
for(i=len-2;
i>=0;
i--)
printf("%c%d",op[i],a[i]);
printf("\n");
}
return 0;
}
参考:
平衡三进制
【C|balanced ternary notation】
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- 个人日记|K8s中Pod生命周期和重启策略
- C/C++|C/C++ basis 02
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转