郑州大学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("*");
	}
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值