2021-01-18 总结

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=0scanf("%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;
}

猜你喜欢

转载自blog.csdn.net/chenweiye1/article/details/112793069