n诺1021-1040

1021 复数
复数可以写成A+Bi的形式,其中A是实部,B是虚部。

从键盘输入两个复数,做加法或乘法并输出结果。

例如

输入:4.2 2.5 2 -1.5 +

输出:6.2 1.0

输入:2.5 3 -1 2.4 *

输出:-9.7 3.0

#include <iostream>
#include<algorithm>
#include<iomanip>
using namespace std;

int main()
{
	double a, b, c, d;
	char s;
	cin >> a >> b >> c >> d;
	cin >> s;
	if (s == '+')
		cout << setiosflags(ios::fixed)<<setprecision(1)<<a + c << " " << b + d << endl;
	if (s == '*')
		cout << setiosflags(ios::fixed) << setprecision(1) << a * c - b * d << " " << a * d + b * d << endl;
	return 0;
}

1022删除最大数
第一行输入一个整数N,N<=100。
第二个输入N个整数。

#include<iostream>
using namespace std;
int main()
{
	int a[100],i,n,max_pos=0,min_pos=0;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i];
	int max=a[0],min=a[0];
	for(i=0;i<n;i++)
	{
		if(a[i]>max)
		{
			max=a[i];
			max_pos=i;
		}
		if(a[i]<min)
		{
			min=a[i];
			min_pos=i;
		}
	}
	for(i=0;i<n;i++)
	{
		if((i==min_pos)||(i==max_pos))
			continue;
		cout<<a[i]<<" ";
	}
	cout<<endl;
	return 0;
}

1023 IP地址

#include 
#include 
#include 
using namespace std;
int exchange(string s)
{
    int sum = 0,coun = 1;
    for(int i = s.size()-1;i >= 0;i--)
    {
        sum += (s[i] - '0')*coun;
        coun *= 10;
    }
    return sum;
}
int main()
{
    string s,temp;
    getline(cin,s);
    int flag = 0,sum = 0,start;
    int num[4];
    int k = -1;
    int coun = 0;
    for(int i = 0;i < s.size();i++)
    {
        if((s[i]>'9' || s[i] <'0') && s[i] != '.')
            flag = 1;
        else if(s[i] == '.')
        {
            if(s[i+1] == '.' || i == s.size()-1 || i == 0)
                flag = 1;
            start = i;
            sum = exchange(temp);
            if(sum > 255 || sum < 0)
                flag = 1;
            num[++k] = sum;
            coun++;
            temp.clear();
        }
        else
            temp+= s[i];
    }
    if(coun != 3)
        flag = 1;
    else
    {
        temp.clear();
        for(int i = start+1;i < s.size();i++)
        {
            if(s[i]>'9' || s[i] <'0')
                flag = 1;
            else
                temp+= s[i];
        }
        sum = exchange(temp);
        if(sum > 255 || sum < 0)
            flag = 1;
        num[++k] = sum;
    }
    if(flag)
    {
        cout << "Error" << endl;
    }
    else
    {
        printf("0x%02X%02X%02X%02X",num[0],num[1],num[2],num[3]);
    }
    return 0;
}

1024 二元组数组
输入N个整数,输出这个整数两两组合且不重复的所有二元组,要求从小到大输出并且用括号的形式。

#include <bits/stdc++.h>
#include <malloc.h>
using namespace std;

int main(){
    int n;
    int a[35]={0};
    int flag[100][100]={0};
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
	
    sort(a,a+n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==j) continue;
            if(flag[a[i]][a[j]]==0)
                cout<<"("<<a[i]<<","<<a[j]<<")"<<endl;
                flag[a[i]][a[j]]=1;
            }
        }

    return 0;
}


1025 链表的合并
第一行输入第一个链表的结点数S1,S1<=100。
第二行输入S1个整数,两两之间用空格隔开。
第三行输入第二个链表的结点数S2,S2<=100。
第四行输入S2个整数,两两之间用空格隔开。
输出描述:
输出合并之后的链表结果,两两之间用空格隔开,末尾没有空格。

#include <iostream>
#include<algorithm>
#include<iomanip>
using namespace std;

struct Node {
	int num;
	struct Node *next;
};
//创建链表
void createNode(Node *head)
{
	Node *r;  //尾结点 跟踪
	r = head;
	int  n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		Node *p = new Node;
		int temp;
		cin >> temp;
		p->num = temp;
		p->next = NULL;
		r->next = p;
		r = r->next;
	}
}
//输出链表
void put(Node *head)
{
	Node *p = head->next;
	while (p)
	{
		cout << p->num << " ";
		p = p->next;
	}
}
//合并链表
void merge(Node *head1, Node* head2,Node *&head3)
{
	Node *p, *q, *r;//分别跟踪链表a,b已经合并链表尾部
	p = head1->next;
	q = head2->next;
	head3 = head1;
	r = head3;
	free(head2);
	while (p&&q)
	{
		if (p->num < q->num)  //走p结点
		{
			r->next = p;
			r = r->next;
			p = p->next;
		}
		else
		{
			r->next = q;
			r = r->next;
			q = q->next;
		}
	}
	if (p)
	{
		r->next = p;
	}
	if (q)
	{
		r->next = q;
	}

}
int main()
{
	Node *head1 = new Node;
	Node *head2 = new Node;
	Node *head;
	createNode(head1);
	createNode(head2);
	merge(head1, head2, head);
	put(head);
	return 0;
}


1026 删除字符串1
给你一个字符串S,要求你将字符串中出现的所有"gzu"子串删除,输出删除之后的S。

#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
using namespace std;


int main()
{
	string s;
	string a = "gzu";
	getline(cin, s);
	int pos;//位置
	while ((pos = s.find(a)) != -1)
	{
		s.erase(pos, a.size());
	}
	cout << s << endl;
	return 0;
}

1027 删除字符串2
给你一个字符串S,要求你将字符串中出现的所有"gzu"(不区分大小写)子串删除,输出删除之后的S。

就是说出现“Gzu”、“GZU”、“GZu”、"gzU"都可以删除。


#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
using namespace std;


int main()
{
	string s;
	getline(cin, s);
	int len = s.size();
	for (int i = 0; i < len; i++)
	{
		if ((s[i] == 'G' || s[i] == 'g') && (s[i + 1] == 'z' || s[i + 1] == 'Z') && (s[i + 2] == 'u' || s[i + 2] == 'U'))
		{
			s[i]='*';
			s[i + 1] = '*';
			s[i + 2] = '*';
		}
	}
	for (int i = 0; i < len; i++)
		if (s[i] != '*')
			cout << s[i];
	cout << endl;
	return 0;
}

1029 骨牌铺方格
在1×n的一个长方形方格中,用1×1、1×2、1×3的骨牌铺满方格,输入n ,输出铺放方案的总数。 例如n=3时,为1× 3方格,骨牌的铺放方案有四种

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n;
	long long dp[5000];
	memset(dp, 0, sizeof(dp));
	dp[1] = 1, dp[2] = 2, dp[3] = 4;
	int index = 4;
	while (1) {
		cin >> n;
		if (n == 0)
			break;
		if (dp[n] == 0) {
			for (int i = index; i <= n; i++) {
				dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
			}
			index = n + 1;
		}
		cout << dp[n] << endl;
	}
	return 0;
}
 

1031 判断是否是整数
输入一个数,判断是否是整数,如果是整数则输出“Yes”,否则输出“No”
输入有多组测试数据
输出描述:
如果是整数则输出“Yes”,否则输出“No”

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;


int main()
{
	int a;
	double n;
	while (cin >> n)
	{
		a = n;
		if (a == n)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

1032 变位词
如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词。如tea 与eat , nic 与cin, ddc与dcd, abc与abc 等。你的任务就是判断它们是否是变位词。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
int main() 
{
	int n;
	cin>>n;
	while(n--)
	{
		char a[100],b[100];
		int i=0,count=0;
		cin>>a>>b;
		sort(a,a+strlen(a));
		sort(b,b+strlen(b));
		if(strlen(a)!=strlen(b))
			cout<<"No"<<endl;
		else
		{
			while(a[i]!='\0')
			{
				if(a[i]!=b[i])
					break;
				else
				{
					count++;
				}
				i++;
			}
			if(count==strlen(a))
				cout<<"Yes"<<endl;
		}
	}
	return 0;
}

1033 细菌的繁殖
某种细菌(用’*'表示)繁殖遵循一定的规律。第一天的数量为1,以后按照如下方式繁殖:

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;


int main()
{
	int i, n,m, sum = 0;
	cin >> n;
	while (n--) {
		cin >> m;
		sum = 0;
		for (i = 1; i <= m; i++)
			sum = sum + 2 * i - 1;
		sum = sum * 2 - (2 * m - 1);
		cout << sum << endl;
	}
	return 0;
}

1034 水仙花数
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。
现在要求输出所有在m和n范围内的水仙花数。


#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

bool fun(int n) {
	int i = n % 10;
	int j = n / 10 % 10;
	int k = n / 100;
	if (n == (k * k*k + i * i*i + j * j*j))
		return true;
	return false;
}
int main()
{
	int m, n, cnt ;
	while (cin >> m >> n)
	{
		if (m == 0 && n == 0)
			break;
		cnt = 0;
		for(int i=m;i<=n;i++)
			if (fun(i))
			{
				cout << i << " ";
				cnt++;
			}
		if (cnt != 0)cout << endl;
		if (cnt == 0)
			cout << "no" << endl;

	}

	return 0;
}

1035 简单背包问题
有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。

问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。

如果有满足条件的选择,则此背包有解,否则此背包问题无解。

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

int a[1000];
//s重量 n物品个数
int knap(int s, int n)
{
	if (s == 0)
		return 1;
	if (s < 0 || (s > 0 && n < 1))
		return 0;
	if (knap(s - a[n], n - 1))
		return 1;
	return knap(s, n - 1);
}
int main()
{
	int s, n;
	while (cin >> s >> n)
	{
		int i = 0;
		for (i = 1; i <= n; i++)
			cin >> a[i];
		if (knap(s, n))
		{
			cout << "YES" << endl;
		}
		else
			cout << "NO" << endl;
	}
	return 0;
}

1036 三个数的最大值
有三个整数a b c,由键盘输入,输出其中的最大的数。

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

int fun(int a, int b, int c)
{
	int t = max(a, b);
	return max(t, c);
}
int main()
{
	int a, b, c;
	while (cin >> a >> b >> c)
		cout << fun(a, b, c) << endl;
	return 0;
}

1037计算函数
有一个函数
/ x x<1
y=| 2x-1 1<=x<10
\ 3x-11 x>=10

写一段程序,输入x,输出y

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;


int main()
{
	int x, y;
	cin >> x;
	if (x < 1)
		y = x;
	else if (x >= 1 && x < 10)
		y = 2 * x - 1;
	else
		y = 3 * x - 11;
	cout << y << endl;
	return 0;
}

1038 成绩等级
给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E


#include <iostream>
#include<algorithm>
#include<string>
using namespace std;


int main()
{
	int score;
	cin >> score;
	if (score < 0 || score>100)
	{
		cout << "输入错误!" << endl;
		exit(1);
	}
	switch (score / 10)
	{
	case 10:
	case 9:cout << 'A' << endl; break;
	case 8:cout << 'B' << endl; break;
	case 7:cout << 'C' << endl; break;
	case 6:cout << 'D' << endl; break;
	default:cout << 'E' << endl;
	}
	return 0;
}


1039逆序数
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

void fun(int n)
{
	int reverse=0, cnt=0, a[5];
	int i = 0;
	while (n > 0)
	{
		int k = n % 10;
		reverse = reverse * 10 + k;
		a[i++] = k;
		cnt++;
		n = n / 10;
	}
	cout << cnt << endl;
	for (i = cnt - 1; i >= 0; i--)
		cout << a[i] << " ";
	cout << endl;
	cout << reverse << endl;
}
int main()
{
	int n;
	cin >> n;
	fun(n);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值