You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
2 years ago | |
---|---|---|
README.md | 2 years ago |
README.md
01-01
#include<stdio.h>
#define max(x,y)((x)>(y)?(x):(y))
#define MAXN 20
int n = 5,W = 10;
int w[MAXN] = {0,2,4,5,6};
int v[MAXN] = {0,2,2,3,5};
int maxv = 0;
int knap(int i,int r){
if(i==0||r==0){
return 0;
}
if(r<w[i]){
knap(i-1,r);
} else{
return max(knap(i-1,r),knap(i-1,r-w[i])+v[i]);
}
}
int main(){
maxv = knap(n,W);
printf("求解的最优结果(最优方案)\n");
printf("选取的物品:");
int x[MAXN] = {0};
int i=n,r = W;
while(i>=0&&r>0){
if(i>0&&knap(i,r)!=knap(i-1,r)){
x[i]=1;
r = r-w[i];
}
i--;
}
for(i=1;i<=n;i++){
if(x[i]==1){
printf("%d ",i);
}
}
printf("\n");
printf("总价值=%d",maxv);
}
02-01
#include<stdio.h>
int fib(int n){
if(n<=2){
return n;
}else{
return fib(n-1)+fib(n-2);
}
}
int main(){
int n;
printf("请输入想打印的斐波拉契数列:\n");
scanf("%d",&n);
printf("斐波那契数列:\n");
for(int i = 0;i<=n;i++){
printf("%d ",fib(i));
}
return 0;
}
03-01
#include<stdio.h>
typedef struct{
int number;
int count;
} Mode;
Mode findMode(int arr[],int n){
Mode mode = {arr[0],1};
int count = 1;
int maxCount = 1;
for(int i=0;i<n;i++){
if(arr[i] == arr[i-1]){
count++;
}else{
if(count>maxCount){
mode.number = arr[i-1];
mode.count = count;
maxCount = count;
}
count = 1;
}
}
if(count>maxCount){
mode.number = arr[n-1];
mode.count = count;
}
return mode;
}
int main(){
int arr[] = {1,2,2,2,3,3,5,6,6,6,6};
int n = sizeof(arr)/sizeof(arr[0]);
printf("递增序列: ");
for (int i = 0; i < n; i++)//输出待求众数序列中的元素;
printf("%d ",arr[i]);
printf("\n");
Mode result = findMode(arr,n);
printf("众数为:%d,重数为:%d",result.number,result.count);
return 0;
}
04-01
#include<stdio.h>
#include<stdlib.h>
#define max(a,b)((a)>(b)?(a):(b))
typedef struct TreeNode{
int val;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
int maxPathHelper(TreeNode *root,int *maxSum){
if(root==NULL){
return 0;
}
int leftSum = maxPathHelper(root->left,maxSum);
int rightSum = maxPathHelper(root->right,maxSum);
int currSum = max(max(root->val,root->val+leftSum+rightSum),
max(root->val+leftSum,root->val+rightSum));
*maxSum = max(*maxSum,currSum);
return max(root->val,max(root->val+rightSum,root->val+leftSum));
}
int maxPathSum(TreeNode *root){
if(root==NULL){
return 0;
}
int maxSum = 0;
maxPathHelper(root,&maxSum);
return maxSum;
}
TreeNode* createTreeNode(int val){
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val=val;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
int main(){
TreeNode* root = createTreeNode(-10);
root->left=createTreeNode(9);
root->right=createTreeNode(20);
root->right->left=createTreeNode(15);
root->right->right=createTreeNode(7);
int maxSum = maxPathSum(root);
printf("最大的路径和为:%d",maxSum);
free(root->left);
free(root->right);
free(root);
return 0;
}