3.28完成9、16、20、98、100、55、57

题目:

已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。

例如,当n=10时,程序的输出结果应为:23.197745。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>

#include <math.h>

/************found************/

fun(int n) {

double sum, s0, s1, s2, s;

int k;

sum = 1.0;

if (n <= 2)

sum = 0.0;

s0 = 0.0;

s1 = 0.0;

s2 = 1.0;

for (k = 4; k <= n; k++) {

s = s0 + s1 + s2;

sum += sqrt(s);

s0 = s1;

s1 = s2;

s2 = s;

}

/************found************/

return sum

}

int main () {

int n;

scanf("%d", &n);

printf("%f", fun(n));

return 0;

}

要点总结:

记住,这里不要把返回值写成float,精度不够的,返回double

代码:

#include <stdio.h>

#include <math.h>

/************found************/

double fun(int n) {

double sum, s0, s1, s2, s;

int k;

sum = 1.0;

if (n <= 2)

sum = 0.0;

s0 = 0.0;

s1 = 0.0;

s2 = 1.0;

for (k = 4; k <= n; k++) {

s = s0 + s1 + s2;

sum += sqrt(s);

s0 = s1;

s1 = s2;

s2 = s;

}

/************found************/

return sum;

}

int main () {

int n;

scanf("%d", &n);

printf("%f", fun(n));

return 0;

}

题目:

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

函数fun的功能是对形参b所指结构体变量中的数据进行修改,将学号加上10,姓名修改为"LiJie",最后在主函数中输出修改后的数据。

例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为:10012、" LiJie"、93、85、87。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序如下。

不得增行或删行,也不得更改程序的结构!

#include <stdio.h>

#include <string.h>

struct student {

long sno;

char name[10];

float score[3];

};

void fun(struct student b[]) {

/**********found**********/

b__1__ += 10;

/**********found**********/

strcpy(b__2__, "LiJie");

}

int main() {

struct student t;

int i;

scanf("%d%s%f%f%f", &t.sno, &t.name, &t.score[0], &t.score[1], &t.score[2]);

/**********found**********/

fun(3);

printf("No: %ld Name: %s\nScores: ", t.sno, t.name);

for (i = 0; i < 3; i++)

printf("%6.2f ", t.score[i]);

printf("\n");

return 0;

}

要点总结:

输入进去的值想要改到原来的,应该输地址进去,里面虽然是数组的形式,但是使用指针去访问值。

代码:

#include <stdio.h>

#include <string.h>

struct student {

long sno;

char name[10];

float score[3];

};

void fun(struct student b[]) {

/**********found**********/

b->sno += 10;

/**********found**********/

strcpy(b->name, "LiJie");

}

int main() {

struct student t;

int i;

scanf("%d%s%f%f%f", &t.sno, &t.name, &t.score[0], &t.score[1], &t.score[2]);

/**********found**********/

fun(&t);

printf("No: %ld Name: %s\nScores: ", t.sno, t.name);

for (i = 0; i < 3; i++)

printf("%6.2f ", t.score[i]);

printf("\n");

return 0;

}

题目:

给定程序中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区t数组中,此存储区的首地址作为函数值返回。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序如下。

不得增行或删行,也不得更改程序的结构!

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define N 10

typedef struct ss

{

char num[10];

int s;

} STU;

void fun(STU a[], int m, STU t[])

{

STU b[N];

int i, j, k;

for (i = 0; i < N; i++)

b[i] = a[i];

for (k = 0; k < m; k++)

{

for (i = j = 0; i < N; i++)

if (b[i].s > b[j].s)

/**********found**********/

j = 1;

/**********found**********/

2 = b[j];

b[j].s = 0;

}

}

int main()

{

STU a[N] = { 0 };

STU pOrder[N];

int i, m;

for (i = 0; i < N; ++i)

{

scanf("%d%s", &a[i].s, a[i].num);

}

scanf("%d", &m);

fun(a, m, pOrder);

for (i = 0; i < m; i++)

/**********found**********/

printf(" %s %d\n", 3, pOrder[i].s);

return 0;

}

要点总结:

关键看懂外层循环是为了给目标数组找m个元素,里面是为了让j指向最大的元素。

代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define N 10

typedef struct ss

{

char num[10];

int s;

} STU;

void fun(STU a[], int m, STU t[])

{

STU b[N];

int i, j, k;

for (i = 0; i < N; i++)

b[i] = a[i];

for (k = 0; k < m; k++)

{

for (i = j = 0; i < N; i++)

if (b[i].s > b[j].s)

/**********found**********/

j = i;

/**********found**********/

t[k] = b[j];

b[j].s = 0;

}

}

int main()

{

STU a[N] = { 0 };

STU pOrder[N];

int i, m;

for (i = 0; i < N; ++i)

{

scanf("%d%s", &a[i].s, a[i].num);

}

scanf("%d", &m);

fun(a, m, pOrder);

for (i = 0; i < m; i++)

/**********found**********/

printf(" %s %d\n", pOrder[i].num, pOrder[i].s);

return 0;

}

题目:

小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。

每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。

当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。

小明想知道一共有多少种数目是包子大叔凑不出来的。

要点总结:

这题和下面那个动态规划,都尽量背背吧,别死磕了。

代码:

#include<bits/stdc++.h>

using namespace std;

int gcd(int a,int b){

return b==0? a : gcd(b,a%b);

}

int main(){

int n;

cin>>n;

vector<int> a(n);

int gongyue=0;

for(int i=0;i<n;i++){

cin>>a[i];

if(i==0){

gongyue=a[i];

}else{

gongyue=gcd(gongyue,a[i]);

}

}

if(gongyue!=1){

cout<<"INF";

return 0;

}

const int shangxian=10000;

bool dp[shangxian+1]={false};

dp[0]=true;

for(int i=0;i<n;i++){

for(int j=0;j+a[i]<=shangxian;j++){

if(dp[j]){

dp[j+a[i]]=true;

}

}

}

int num=0;

for(int i=1;i<=shangxian;i++){

if(!dp[i]){

num++;

}

}

cout<<num;

return 0;

}

题目:

已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K ,表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。 例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:

6 = 3 + 3

7 = 3 + 3 + 1

8 = 3 + 3 + 1 + 1

9 = 3 + 3 + 3

10 = 3 + 3 + 3 + 1

11 = 3 + 3 + 3 + 1 + 1

12 = 3 + 3 + 3 + 3

13 = 3 + 3 + 3 + 3 + 1。

然而,使用 5 枚 1 分或者 3 分的邮票根本不可能贴出 14 分的邮资。因此,对于这两种邮票的集合和上限 K=5,答案是 M=13。

题目:

#include<bits/stdc++.h>

using namespace std;

int main(){

int k,n;

cin>>k>>n;

vector<int> stamp(n);

int maxprice=INT_MIN;

for(int i=0;i<n;i++){

cin>>stamp[i];

maxprice=max(maxprice,stamp[i]);

}

vector<int> dp(k*maxprice+1,INT_MAX);

dp[0]=0;

int res=0;

for(int i=1;i<=k*maxprice;i++){

for(int j=0;j<n;j++){

int price=stamp[j];

if(i>=price&&dp[i-price]!=INT_MAX){

dp[i]=min(dp[i],dp[i-price]+1);

}

}

if(dp[i]<=k){

res=i;

}else{

break;

}

}

cout<<res;

return 0;

}

题目:

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

我们现在需要产生回文数,步骤如下:

给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。

又如:对于10进制数87:

STEP1:87+78 = 165

STEP2:165+561 = 726

STEP3:726+627 = 1353

STEP4:1353+3531 = 4884

在这里的"一步"是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10或N=16)进制数M(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。

如果在30步以内(包含30步)不可能得到回文数,则输出"Impossible!"

要点总结:

记住模拟加法计算时候用的是while循环,不是用的for,别忘了循环块里面自己写i--和j--。另外对于十六进制的api记忆一下。这种形式sunsigned long long cons=num1+num;如果直接对cons进行to_string然后输出得到的是十进制的结果,必须要再用stringstream 用十六进制输入后然后.str()

代码:

#include<bits/stdc++.h>

using namespace std;

bool ishui(string s){

string s1=s;

reverse(s1.begin(),s1.end());

return s1==s;

}

string step(int wei,string s){

string s1=s;

reverse(s1.begin(),s1.end());

vector<int> res;

if(wei!=16){

int jin=0;

int i=s1.size()-1;

int j=s.size()-1;

while(i>=0&&j>=0){

int a=s1[i]-'0';

int b=s[j]-'0';

int cur=(a+b+jin)%wei;

res.push_back(cur);

jin=(a+b+jin)/wei;

i--;

j--;

}

while(jin>0){

int cur=jin%wei;

res.push_back(cur);

jin=(jin)/wei;

}

string cons="";

for(int i=res.size()-1;i>=0;i--){

char a=res[i]+'0';

cons=cons+a;

}

return cons;

}else{

stringstream ss1,ss;

ss1<<hex<<s1;

ss<<hex<<s;

unsigned long long num1,num;

ss1>>num1;

ss>>num;

unsigned long long cons=num1+num;

stringstream m;

m<<hex<<cons;

return m.str();

}

}

int main(){

int n;

string s;

cin>>n>>s;

int time=0;

while(!ishui(s)){

s=step(n,s);

time++;

if(time>30){

cout<<"Impossible!";

return 0;

}

}

cout<<"STEP="<<time;

return 0;

}

题目:

达达在陶陶的影响下,也对学习慢慢的产生了兴趣。

他在每次考试之后,都会追着老师问,自己在班级的总名次是多少。考试一多,老师也不耐烦了,于是他给了达达所有人的成绩,让他自己去算出自己的排名。

可人太多了,达达也无法立即算出来,于是他想让你帮帮他。

要点总结:

使用for循环遍历自己的结构体vector时候,如果不是用的下标还想改里面值,记得&,还有,那个比较算法里面不要想保持原序的情况直接return true,会乱掉,这里不返回也行,或者返回个false

代码:

#include<bits/stdc++.h>

using namespace std;

struct stu{

string name;

int score;

};

void culmu(vector<stu> &arr,string name,int score){

for(stu &x : arr){

if(x.name==name){

x.score+=score;

}

}

}

bool compa(stu a,stu b){

if(a.score!=b.score){

return a.score>b.score;

}

if(a.name=="DaDa") return true;

}

int main(){

int n;

cin>>n;

vector<stu> arr;

for(int i=0;i<n;i++){

stu a;

cin>>a.name;

a.score=0;

arr.push_back(a);

}

int m;

cin>>m;

for(int i=0;i<m;i++){

for(int j=0;j<n;j++){

int score;

string name;

cin>>score>>name;

culmu(arr,name,score);

}

sort(arr.begin(),arr.end(),compa);

int idx=0;

for(int i=0;i<arr.size();i++){

if(arr[i].name=="DaDa"){

idx=i;

break;

}

}

cout<<idx+1<<endl;

}

return 0;

}

英语翻译:

预训练模型已经成为现代人工智能的一个主导范例。这些模型会先在大规模的数据集上进行训练以学习通用的表征然后再在具体的下游任务进行微调。这种方式显著减少了模型对于有标签数据的需求并且提升了模型的性能。在自然语言处理的领域,类似于BERT以及GPT的模型会先用自监督学习的方式进行预训练。微调模型使得模型能够适应到下游任务中,例如文本分类,情绪分析以及问题回答。迁移学习在这样的过程中也起到了至关重要的作用,它可以将一个领域的知识迁移到另一个领域。即使这些技术有很大的作用,但预训练模型对于计算资源的要求是巨大的,这引起了人们对于能源效率以及环境影响的担忧。

相关推荐
带娃的IT创业者2 小时前
营养食谱推荐引擎:基于规则与协同过滤的混合算法
算法·规则引擎·协同过滤·健康管理·食谱推荐·营养搭配·家庭饮食
扶摇接北海1762 小时前
洛谷:P1307 [NOIP 2011 普及组] 数字反转
c++·算法·洛谷
Fortune792 小时前
实时操作系统中的C++
开发语言·c++·算法
AI科技星2 小时前
基于v≡c光速螺旋理论的正确性证明:严格遵循科学方法论的完整路径
c语言·开发语言·人工智能·线性代数·算法·机器学习·数学建模
RFdragon6 小时前
分享本周所学——三维重建算法3D Gaussian Splatting(3DGS)
人工智能·线性代数·算法·机器学习·计算机视觉·矩阵·paddlepaddle
Zero12 小时前
机器学习微积分--(1)核心思想
人工智能·算法·机器学习
有Li12 小时前
一种病理学内容感知变速率学习图像压缩框架 (PathoLIC)/文献速递-多模态应用技术
人工智能·深度学习·算法·计算机视觉·医学生
x_xbx13 小时前
LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Ricky_Theseus13 小时前
数据库关系代数 - 连接操作
linux·数据库·算法