XJTU 算法设计与问题求解作业题 第一周
第一题
题目描述
包括有整数的比较、浮点数的比较、双精度的比较。
先有一个判断比较的类型,如果输入1,则为整数;2为浮点数;3为双精度。
输入输出样例
输入:
1
1 2 3
输出:
3
输入:
2
1.2 3.6 0
输出:
3.6
参考代码
#include <iostream>
using namespace std;
int main()
{
double a,x,y,z;
cin>>a>>x>>y>>z;
if(x>y)
{
if(x>z)cout<<x;
else cout<<z;
}
else
{
if(y>z)cout<<y;
else cout<<z;
}
return 0;
}
第二题
题目描述
使用C++新特性编写程序,输入一个字符串,按单词将该字符串逆序输出,该字符串最多包含20个单词,为了简化问题,字符串中不包含标点符号。
提示:可用c++中string类数组
输入输出样例
输入:
XIAN JIAOTONG UNIVERSITY
输出:
UNIVERSITY JIAOTONG XIAN
参考代码
第三题
题目描述
考虑char 数组表示的正整数数字,比如”123”、”976”,现在要将他们变为int型数字,然后将两个数字作加法。
【分析】
一位的字符型数字减去字符’0‘即为该整数,如 ’1‘-’0‘ = 1、’7‘-’0‘ = 7。
样例输入:
123
123
样例输出:
246
参考代码
#include <iostream>
#include <cstring>
using namespace std;
int turn(char a[])
{
int x=0;
for(int i=0;i<strlen(a);i++)
{
x=10*x+(a[i]-'0');
}
return x;
}
int main()
{
char str1[16];
char str2[16];
gets(str1);gets(str2);
cout<<(turn(str1)+turn(str2));
return 0;
}
第四题
题目描述
本题目考虑字符数组形式的串。
【分析】
不断的从母串 str 中取出和子串长度相等的临时子串 temp,与子串 str2 进行比较。如果没有找到子串,返回 -1;成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。
样例输入:
abcdef
abcba
样例输出:
-1
参考代码
#include<stdio.h>
#include<string.h>
int judge(char a[],char b[])
{
int i=0,j=strlen(b),flag=0,m,k;
while(a[i]!='\0')
{
if(a[i]==b[0])
{
m=i;
for(k=1;k<j;k++)
{
if(a[++m]!=b[k])
break;
}
if(k==j)
{
flag=1;return i;
}
}
i++;
}
if(flag!=1)
return -1;
}
int main()
{
char str1[101],str2[101];int x;
gets(str1);
gets(str2);
x=judge(str1,str2);
printf("%d",x);
return 0;
}
第五题
题目描述
所谓对称数,就是譬如:1,323,34543之类的数。可以把原来的数的高低位互换,构造一个新的数,如果和原来的数相等则是对称数。
输入一个数如果是对称数,返回1,否则返回0
样例输入:
1
样例输出:
1
参考代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a;int b=0;
cin>>a;int temp=a;
int i=0;
while(temp!=0)
{
b=b*10+temp%10;
temp/=10;
}
if(a==b)cout<<"1";
else cout<<"0";
return 0;
}
第六题
题目描述
给定K个整数组成的序列{ N1, N2, …, NK },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
输入与输出格式
输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
样例输入:
6
-2 11 -4 13 -5 -2
样例输出:
20
参考代码
#include <iostream>
using namespace std;
int MaxSubSequence(const int A[], int N){
int ThisSum,MaxSum,i,j,k;
MaxSum = 0;
for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
{
ThisSum = 0;
for(k=i;k<=j;k++)
{
ThisSum += A[k];
}
if(ThisSum > MaxSum)
MaxSum = ThisSum;
}
}
return MaxSum;
}
int main()
{
int a;
cin>>a;
int *num=new int [a];
for(int i=0;i<a;i++)cin>>num[i];
cout<<MaxSubSequence(num,a);
return 0;
}
上一篇: 算法设计与分析2018.9第一周作业
下一篇: 详谈Windows消息循环机制