郑州大学2023-2024第二学期高级语言程序设计-实验6
1 抗疫凯旋
这道题已经给了提示如何在while的括号里判断,这里用的是返回值。大家应该知道你在使用getline函数的时候。 getline函数会有返回值,分别是0和1。如果是1的话,那么判断结果为真,就可以继续getline函数的进行,如果是0的话就终止。
那么什么时候是0,什么时候返回1呢?就如我题中所用的getline,就是当还在输入的时候,它就会持续地返回1,如果没有输入就会返回0,就是这样的情况。
大家可以搜一下如何使用getline,以及这个函数的一些操作,这个实验后面还用得着。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
string a;
int ans=0;
while(getline(cin,a))
{
ans++;
}
printf("%d",ans);
}
2 求10个点到原点的距离和
非常简单的一道题啊,注意一下细节就好了。
#include<bits/stdc++.h>
using namespace std;
double dis(double x,double y)
{
return sqrt(x*x+y*y);
}
int main(void)
{
double x,y,ans=0;
for(int i=0;i<10;i++)
{
scanf("%lf%lf",&x,&y);
ans+=dis(x,y);
}
printf("distance = %.6lf",ans);
}
3 最小公倍数
同样没什么难度,而且C++里面还有一个直接对应的函数__gcd(),可以简化代码。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",a*b/__gcd(a,b));
}
}
4 变量有多少字节?
这道题依旧用到了getline函数用来直接输入字符串。并且这道题用到了C++里面一个关于字符串的性质。在 C++里面字符串之间可以直接进行比较。并不需要strcmp函数。具体的情况大家可以自己查一下,我就不在这里赘述了。
#include<bits/stdc++.h>
using namespace std;
void dis()
{
string a;
getline(cin,a);
if(a=="char") printf("1\n");
if(a=="int") printf("4\n");
if(a=="long") printf("4\n");
if(a=="long long") printf("8\n");
if(a=="__int128") printf("16\n");
if(a=="float") printf("4\n");
if(a=="double") printf("8\n");
if(a=="long double") printf("16\n");
}
int main(void)
{
int t;cin>>t;t++;
while(t--) dis();
}
5 是否是斐波那契家族的一员?
这道题题目里面都已经说了,可以先单独做一个生成斐波那契数列的。函数,然后再去查找相关的斐波那契数。不过需要注意的是你生成的斐波那契数需要包含它所给的数据范围。
#include<bits/stdc++.h>
using namespace std;
int a[40];
void fei()
{
a[0]=1,a[1]=1;
for(int i=2;i<40;i++)
{
a[i]=a[i-1]+a[i-2];
}
}
int main(void)
{
int ans=-1,n;
cin>>n;
fei();
for(int i=0;i<40;i++)
{
if(n==a[i])
{
ans=i+1;break;
}
}
cout<<ans;
}
6 递归实现逆序输出整数
使用递归的时候注意终止条件,当a等于零的时候就可以直接终止了。a不等于零的时候就输出末位数然后将a/10。
#include<bits/stdc++.h>
using namespace std;
void digui(int a)
{
if(a==0) return ;
else
{
printf("%d",a%10);
digui(a/10);
}
}
int main(void)
{
int a;
cin>>a;
digui(a);
}
7 河南的抗疫英雄
这道题非常常规,正常写就行了
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n;
cin>>n;
int ans=0;
for(int i=0;i<n;i++)
{
string a;
cin>>a;
cin>>a;
if(a=="HA") ans++;
}
cout<<ans;
}
8 出生年
首先要判断你所输入的数里面有几个不同的数。要注意的是,如果这个数小于1000的话,要自动默认0是一个存在的数。之后直接与n进行对比就可以了,并得出答案。要注意的是首位补零可以通过%0nd的来决定。
#include<bits/stdc++.h>
using namespace std;
int a[10];
int ji(int y)
{
memset(a,0,sizeof(a));
if(y<1000) a[0]=1;
while(y)
{
if(y%10==0) a[0]=1;
if(y%10==1) a[1]=1;
if(y%10==2) a[2]=1;
if(y%10==3) a[3]=1;
if(y%10==4) a[4]=1;
if(y%10==5) a[5]=1;
if(y%10==6) a[6]=1;
if(y%10==7) a[7]=1;
if(y%10==8) a[8]=1;
if(y%10==9) a[9]=1;
y=y/10;
}
return accumulate(a,a+10,0);
}
int main(void)
{
int y,n;
cin>>y>>n;
int i=0;
while(ji(y+i)!=n)
{
i++;
}
printf("%d %04d",i,i+y);
}
9 汉诺塔问题
非常常规的汉诺塔问题,要注意的是它输入的是字符串。
#include<bits/stdc++.h>
using namespace std;
int n;
void jie(int n,string a,string b,string c)
{
if(n==1)
{
cout<<a<<"->"<<c<<endl;
return;
}
else
{
jie(n-1,a,c,b);
cout<<a<<"->"<<c<<endl;
jie(n-1,b,a,c);
}
}
int main(void)
{
cin>>n;
string a,b,c;
cin>>a;
cin>>b;
cin>>c;
jie(n,a,b,c);
}
10 素因子分解
首先要写一个判断素数的函数。妻子。蔡恩统一的时候要注意会直接输出1等于1。除此之外的话就是一套非常常规的题。我选择的是用结构体来储存一个数出现的次数和这个数本身。可以从小到大遍历,直接跑暴力就可以获得答案了。
#include<bits/stdc++.h>
using namespace std;
bool pan(long long a)
{
if(a<=1) return 0;
for(int i=2;i*i<=a;i++)
{
if(a%i==0) return 0;
}
return 1;
}
struct ji{
long long a,b;
}m[100];
int main(void)
{
long long n;
cin>>n;
int j=0;
if(n==1) printf("1=1");
else{
printf("%lld=",n);
while(n!=1)
{
for(int i=1;i<=n;i++)
{
if(pan(i))
{
if(n%i==0)
{
int sum=0;
while(n%i==0)
{
sum++;
n=n/i;
}
m[j].a=i,m[j].b=sum;
j++;
}
}
}
}
for(int i=0;i<j;i++)
{
if(m[i].b==1) printf("%lld",m[i].a);
else printf("%lld^%lld",m[i].a,m[i].b);
if(i!=j-1) printf("*");
}
}
}
标签:10,int,void,2023,cin,学期,2024,printf,include
From: https://blog.csdn.net/xunxianxian/article/details/139250084