题目 砝码数量问题
输入n为物体的重量
现有砝码规格 1 4 6
问最少需要几个砝码
n的取值范围1<=n<=1000000//几个零记不清了,好像是10亿
最开始的时候用了大量的时间作一个三重嵌套的循环
后来写的过程中发现可能不符合时空复杂度的要求
最后把三重循环分解成了3个,有o(n)平方变成了 a* n
整体的思路:
1.第一个循环的进入条件是i*a<=n;意思是最起码大于6的重量才会用到6这枚砝码
然后进去之后 如果在循环体中刚好i*a刚好等于重量,就直接goto到最后
输出i+j+k,而由于初值赋予的都是0,所以结果正确
2.如果循环运行结束都不=n,例如n=11的时候,
这个时候循环结束,i=2,所以给i记--,意为只需要一枚6的砝码
给重量n做减法,n=n-i*a;//这个地方的i是做过--的,因为结束循环的条件是超范围
3.第二个关于砝码4的循环同理上面的
4.第三个关于砝码1的循环,因为任何一个整数都会被1整除,所以循环结束计算结束
5.因为使用了goto,所以在第三重里,计算到最后一步时,直接跳出至结尾
不需要对k进行--
#include “stdio.h”
/*
*/
int main()
{
int a=6,b=4,c=1;
int i=0,j=0,k=0;
int n;
scanf("%d",&n);
for(i=1;i*a<=n;i++){
if(a*i==n){
goto end;
}
}
i--;
n=n-i*a;
for(j=1;j*b<=n;j++){
if(j*b==n){
goto end;
}
}
j--;
n=n-j*b;
for(k=1;k*c<=n;k++){
if(k*c==n){
goto end;
}
}
end:
printf("%d",i+j+k);
return 0;
}
一眼就看出来怎么做
做了一个多小时,md
主要是前面用了二十多分钟写了个三重循环
写完发现是废的,各种问题
干脆分解开,分步骤解决这个问题