获得徽章 0
#JUEJIN FRIENDS 好好生活计划#
应该算是day7了(?我也有点忘记了qaq
今日01背包问题,然而不是很会
#include<bits/stdc++.h>
using namespace std;
struct obj{
float w;
float v;
float vw;
obj(float _vw,float _w){
w = _w;
vw = _vw;
v = w*vw;
}
};
bool cmp(obj x,obj y){
return x.vw >= y.vw;
}
// 贪心法求解背包问题
// 输入:物品数量n,背包容量c,按照单位重量排好的物品序列a
void Knapsack(int n, float c, obj a[]) {
float sumv = 0;
for(int i = 0;i < n;i++){
if(c > a[i].w){
c -= a[i].w;
sumv += a[i].v;
cout<<i+1<<": "<<a[i].w<<endl;
}else{
cout<<i+1<<": "<<c<<endl;
sumv += c*a[i].vw;
c = 0;
}
}
cout<<sumv<<endl;
}
int main(){
int n = 3;
float c = 15;
obj a[3] = {{5,10},{2,8},{3,9}};
sort(a,a+3,cmp);
Knapsack(n, c, a);
}
应该算是day7了(?我也有点忘记了qaq
今日01背包问题,然而不是很会
#include<bits/stdc++.h>
using namespace std;
struct obj{
float w;
float v;
float vw;
obj(float _vw,float _w){
w = _w;
vw = _vw;
v = w*vw;
}
};
bool cmp(obj x,obj y){
return x.vw >= y.vw;
}
// 贪心法求解背包问题
// 输入:物品数量n,背包容量c,按照单位重量排好的物品序列a
void Knapsack(int n, float c, obj a[]) {
float sumv = 0;
for(int i = 0;i < n;i++){
if(c > a[i].w){
c -= a[i].w;
sumv += a[i].v;
cout<<i+1<<": "<<a[i].w<<endl;
}else{
cout<<i+1<<": "<<c<<endl;
sumv += c*a[i].vw;
c = 0;
}
}
cout<<sumv<<endl;
}
int main(){
int n = 3;
float c = 15;
obj a[3] = {{5,10},{2,8},{3,9}};
sort(a,a+3,cmp);
Knapsack(n, c, a);
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
day6 并查集
int find(int x) //查找x的教主
{
while(pre[x] != x) //如果x的上级不是自己(则说明找到的人不是教主)
x = pre[x]; //x继续找他的上级,直到找到教主为止
return x;
}
day6 并查集
int find(int x) //查找x的教主
{
while(pre[x] != x) //如果x的上级不是自己(则说明找到的人不是教主)
x = pre[x]; //x继续找他的上级,直到找到教主为止
return x;
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
Day5 二分查找算法
int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
{
int left = 0;
int right = size - 1; // 定义了target在左闭右闭的区间内,[left, right]
while (left <= right) { //当left == right时,区间[left, right]仍然有效
int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出
if (nums[middle] > target) {
right = middle - 1; //target在左区间,所以[left, middle - 1]
} else if (nums[middle] < target) {
left = middle + 1; //target在右区间,所以[middle + 1, right]
} else { //既不在左边,也不在右边,那就是找到答案了
return middle;
}
}
//没有找到目标值
return -1;
}
Day5 二分查找算法
int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
{
int left = 0;
int right = size - 1; // 定义了target在左闭右闭的区间内,[left, right]
while (left <= right) { //当left == right时,区间[left, right]仍然有效
int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出
if (nums[middle] > target) {
right = middle - 1; //target在左区间,所以[left, middle - 1]
} else if (nums[middle] < target) {
left = middle + 1; //target在右区间,所以[middle + 1, right]
} else { //既不在左边,也不在右边,那就是找到答案了
return middle;
}
}
//没有找到目标值
return -1;
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
Day4 求链表倒数第K项
#include <iostream>
using namespace std;
#define Maxsize 1000000
#define ELemType int
#define Maxsize 1000000
typedef struct List{
ELemType *head;
int len;
int ca;
}List;
void Init(List &l1){
l1.ca=Maxsize;
l1.head=new ELemType[Maxsize];
l1.len=0;
}
void push(List &l1,ELemType key){
l1.head[l1.len]=key;
l1.len++;
}
int main(){
List l1;
Init(l1);
int k;
cin>>k;
while(true){
int n;
cin>>n;
if(n<0){
break;}
push(l1,n);
}
if(l1.len-k>=0){
cout<<l1.head[l1.len-k];
}
else{
cout<<"NULL"<<endl;
}
}
Day4 求链表倒数第K项
#include <iostream>
using namespace std;
#define Maxsize 1000000
#define ELemType int
#define Maxsize 1000000
typedef struct List{
ELemType *head;
int len;
int ca;
}List;
void Init(List &l1){
l1.ca=Maxsize;
l1.head=new ELemType[Maxsize];
l1.len=0;
}
void push(List &l1,ELemType key){
l1.head[l1.len]=key;
l1.len++;
}
int main(){
List l1;
Init(l1);
int k;
cin>>k;
while(true){
int n;
cin>>n;
if(n<0){
break;}
push(l1,n);
}
if(l1.len-k>=0){
cout<<l1.head[l1.len-k];
}
else{
cout<<"NULL"<<endl;
}
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
Day4 栈的操作
#include <iostream>
using namespace std;
int top;
int mystack[Maxsize] = { 0 };
void Push(int);
int getTop();
void Pop();
int main()
{
top = 0;
int x, y;
cin >> x;
for (int i = 0; i < x; i++)
{
cin >> y;
if (y != 0)
{
if (top == Maxsize)
{
cout << "FULL" << " ";
}
else
Push(y);
}
else
{
if (top == 0)
{
cout << "EMPTY" << " ";
continue;
}
else
{
cout << getTop() << " ";
Pop();
}
}
}
cout << "\n";
for (int i = 0; i < top; i++)
{
cout << mystack[i] << " ";
}
}
void Push(int y)
{
mystack[top] = y;
top++;
}
int getTop()
{
return mystack[top - 1];
}
void Pop()
{
mystack[top] = 0;
top--;
}
Day4 栈的操作
#include <iostream>
using namespace std;
int top;
int mystack[Maxsize] = { 0 };
void Push(int);
int getTop();
void Pop();
int main()
{
top = 0;
int x, y;
cin >> x;
for (int i = 0; i < x; i++)
{
cin >> y;
if (y != 0)
{
if (top == Maxsize)
{
cout << "FULL" << " ";
}
else
Push(y);
}
else
{
if (top == 0)
{
cout << "EMPTY" << " ";
continue;
}
else
{
cout << getTop() << " ";
Pop();
}
}
}
cout << "\n";
for (int i = 0; i < top; i++)
{
cout << mystack[i] << " ";
}
}
void Push(int y)
{
mystack[top] = y;
top++;
}
int getTop()
{
return mystack[top - 1];
}
void Pop()
{
mystack[top] = 0;
top--;
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
Day3 今日份线性表插入排序
#include <iostream>
#include <cstdio>
using namespace std;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L){
L=new LNode;
L->next=NULL;
}
void Insert(LinkList &L,ElemType e){
LinkList p=new LNode;
LinkList s=new LNode;
p=L;
while(p->next){
if(e<=p->next->data) break;
p=p->next;
}
s->data=e;
s->next=p->next;
p->next=s;
}
void Print(LinkList &L){
LinkList p=new LNode;
p=L->next;
while(p){
if(p!=L->next) printf("->");
printf("%d",p->data);
p=p->next;
}
}
int main(){
LinkList l1,l2;
int e;
InitList(l1);
InitList(l2);
do{
scanf("%d",&e);
if(e>0){
Insert(l1,e);
}else{
Insert(l2,e);
}
}while(getchar()==' ');
Print(l1);
cout<<endl;
Print(l2);
cout<<endl;
return 0;
}
Day3 今日份线性表插入排序
#include <iostream>
#include <cstdio>
using namespace std;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L){
L=new LNode;
L->next=NULL;
}
void Insert(LinkList &L,ElemType e){
LinkList p=new LNode;
LinkList s=new LNode;
p=L;
while(p->next){
if(e<=p->next->data) break;
p=p->next;
}
s->data=e;
s->next=p->next;
p->next=s;
}
void Print(LinkList &L){
LinkList p=new LNode;
p=L->next;
while(p){
if(p!=L->next) printf("->");
printf("%d",p->data);
p=p->next;
}
}
int main(){
LinkList l1,l2;
int e;
InitList(l1);
InitList(l2);
do{
scanf("%d",&e);
if(e>0){
Insert(l1,e);
}else{
Insert(l2,e);
}
}while(getchar()==' ');
Print(l1);
cout<<endl;
Print(l2);
cout<<endl;
return 0;
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
Day2 今日份算法小结 quicksort
#include <iostream>
using namespace std;
const int N=1e6+5;
int n;
int q[N];
void quick_sort(int q[],int l,int r){
if(l>=r) return;
int x=q[(l+r)/2],i=l-1,j=r+1;
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&q[i]);
}
quick_sort(q,0,n-1);
for(int i=0;i<n;i++){
printf("%d ",q[i]);
}
return 0;
}
Day2 今日份算法小结 quicksort
#include <iostream>
using namespace std;
const int N=1e6+5;
int n;
int q[N];
void quick_sort(int q[],int l,int r){
if(l>=r) return;
int x=q[(l+r)/2],i=l-1,j=r+1;
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&q[i]);
}
quick_sort(q,0,n-1);
for(int i=0;i<n;i++){
printf("%d ",q[i]);
}
return 0;
}
展开
评论
点赞
#JUEJIN FRIENDS 好好生活计划#
11.9日 顺序表建立与遍历
#include <cstdio>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int Elemtype;
typedef struct{
Elemtype *Elem;
int length;
}SqList;
int n;
Elemtype m;
void Initlist(SqList &L,int n){
L.Elem=new Elemtype[n];
L.length=n;
for(int i=0;i<n;i++){
cin>>m;
L.Elem[i]=m;
}
}
void Print(SqList &L){
for(int i=0;i<L.length;i++){
if(i==L.length-1){
cout<<L.Elem[L.length-1];
}
else
cout<<L.Elem[i]<<" ";
}
}
int main(){
int n;
cin>>n;
SqList L;
Initlist(L,n);
Print(L);
return 0;
}
11.9日 顺序表建立与遍历
#include <cstdio>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int Elemtype;
typedef struct{
Elemtype *Elem;
int length;
}SqList;
int n;
Elemtype m;
void Initlist(SqList &L,int n){
L.Elem=new Elemtype[n];
L.length=n;
for(int i=0;i<n;i++){
cin>>m;
L.Elem[i]=m;
}
}
void Print(SqList &L){
for(int i=0;i<L.length;i++){
if(i==L.length-1){
cout<<L.Elem[L.length-1];
}
else
cout<<L.Elem[i]<<" ";
}
}
int main(){
int n;
cin>>n;
SqList L;
Initlist(L,n);
Print(L);
return 0;
}
展开
评论
点赞
赞了这篇沸点
#JUEJIN FRIENDS 好好生活计划#
活动打卡的第一天
作为JUEJIN FRIENDS的YOYO欢迎各位新朋友的到来~
在2022年最后的50天,与A-SOUL一起希望掘友关注技术,好好生活!
针对于#JUEJIN FRIENDS好好生活计划#特此说明以下几点注意事项📢
1.11月9日-12月31日,只要连续打卡满21天即可,例如11月9日至11月30日连续打卡,算成功参与活动
2.为后续公示和奖品发放考虑,参与活动的掘友不得以初始昵称,即“用户XXXXX”,可自行修改昵称~否则将出现奖品无法兑换到该账号的情况!
3.连续发布的内容,不可以划水哦!可关于你生活中的小美好,包括早睡早起、做一餐饭、健身锻炼、最美冬日等内容!如果纯为了打卡而无内容是不作数的哦!YOYO会带着小伙伴一起审核的捏!
感谢掘友对活动的支持和关注!有任何问题和反馈,欢迎与YOYO沟通~
活动打卡的第一天
作为JUEJIN FRIENDS的YOYO欢迎各位新朋友的到来~
在2022年最后的50天,与A-SOUL一起希望掘友关注技术,好好生活!
针对于#JUEJIN FRIENDS好好生活计划#特此说明以下几点注意事项📢
1.11月9日-12月31日,只要连续打卡满21天即可,例如11月9日至11月30日连续打卡,算成功参与活动
2.为后续公示和奖品发放考虑,参与活动的掘友不得以初始昵称,即“用户XXXXX”,可自行修改昵称~否则将出现奖品无法兑换到该账号的情况!
3.连续发布的内容,不可以划水哦!可关于你生活中的小美好,包括早睡早起、做一餐饭、健身锻炼、最美冬日等内容!如果纯为了打卡而无内容是不作数的哦!YOYO会带着小伙伴一起审核的捏!
感谢掘友对活动的支持和关注!有任何问题和反馈,欢迎与YOYO沟通~
展开
257
256