欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XJTU 算法设计与问题求解作业题 第一周

程序员文章站 2022-07-14 17:42:55
...

第一题

题目描述
包括有整数的比较、浮点数的比较、双精度的比较。
先有一个判断比较的类型,如果输入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;
}

相关标签: c++