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;
}