2021-01-18 总结
1.背包问题
【问题描述】
简单的背包问题。设有一个背包,可以放入的重量为 s。现有 n 件物品,重量分别为 w1,w2…,wn,(1≤i≤n)
均为正整数,从 n 件物品中挑选若干件,使得放入背包的重量之和正好为 s。找到一组解即可。
【输入格式】
第一行是物品总件数和背包的载重量,第二行为各物品的重量。
【输出格式】
各所选物品的序号和重量。
【输入样例】
5 10
1 2 3 4 5
【输出样例】
number:1 weight:1
number:4 weight:4
number:5 weight:5
#include<cstdio>
using namespace std;
int vis[100],a[100],k=0,b[100],n;
bool stop;
void dfs(int x,int y){
if(x>y){
return;
}
if(x==y){
for(int i=1;i<=n;i++){
if(vis[i]==1){
printf("number:%d",i);
printf(" weight:%d\n",a[i]);
}
}
stop=1;//这里用stop标记一下,表示已经输出过了;
return;
}
for(int i=1;i<=n&&stop==0;i++){
if(vis[i]==0){
vis[i]=1;
dfs(x+a[i],y);
vis[i]=0;
}
}
return;
}
int main()
{
int sum=0,s;
scanf("%d%d",&n,&s);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
dfs(sum,s);
if(stop==0){
//如果没输出过,这里输出“not found”;
printf("not found");
}
return 0;
}
这道题一开始没注意到输出的格式,
输出的 number 和 weight 之间应该是四个空格,导致了本题完全错误,由于错误比较隐蔽,我找了好久好久才发现。。。
2.十进制转八进制
【问题描述】
用递归算法,把任一给定的十进制正整数转换成八进制数输出。
【输入格式】
输入一个正整数,表示需要转换的十进制数。
【输出格式】
输出一个正整数,表示转换之后的八进制的数。
【输入样例】
15
【输出样例】
17
#include<cstdio>
using namespace std;
long long x=1;
int a;
int main()
{
long long sum=0;
scanf("%d",&a);
while(a!=0){
sum=sum+(a%8)*x;
a/=8;
x*=10;
}
printf("%lld",sum);
return 0;
}
这个应该是正常的写法了,但是我写完之后却神奇的发现别人写的怎么都比我简单呢。。。
#include<cstdio>
using namespace std;
int main()
{
long long n;
scanf("%lld",&n);
printf("%llo",n);
return 0;
}