大一作业习题

2023-12-13 20:43:05

题一:

答案:

#include <stdio.h> 

void input(int a[], int m) //键盘输入a数组的前m个元素。
{
	int i = 0;   
	for (i = 0; i < m; i++)
	{
		scanf("%d", &a[i]);
	}
}
void print(int a[], int m) //输出a数组的前m个元素,按"%4d" 格式输出数组元素,输出完毕换行 。
{
	int i = 0;
	for (i = 0; i < m; i++)
	{
		printf("%4d", a[i]);
	}
	printf("\n");
}
void findMaxIncList(int a[], int n, int result[])/*在 a数组的前n个元素 查找最长K递增子序列, 序列长度存放在result[0], 序列起始下标存放在result[1] ;在查找过程中,输出发现的所有K递增子序列,按"%4d" 格式输出数组元素,每个子序列输出完毕换行 。 */

{
    int maxLen = 1;    //最长的长度
    int startIndex = 0;   //一开始的下标
    int nowLen = 1;     //此时的长度
    int nowStart = 0;   //此时的下标

    for (int i = 1; i < n; i++)  
    {
        if (a[i] > a[i - 1])   //如果后面的元素大于前面的元素
        {
            nowLen++;   //此时的长度(计数器+1)
            printf("%4d", a[i - 1]);   //打印前面这个元素
            if (i == n - 1)   //如果这个元素是输入的最后一个元素
            {
                printf("%4d\n", a[i]);   //打印最后一个元素
            }
        }
        else   //如果后面的元素小于前面的元素
        {
            printf("%4d\n", a[i - 1]);   //打印前面这个元素并换行结束该递增序列
            if (i == n - 1)    //如果这个元素是输入的最后一个元素
            {
                printf("%4d\n", a[i]);   //打印最后一个元素
            }
            if (nowLen > maxLen)   //如果此时的长度比之前记录最长的长度还长
            {
                maxLen = nowLen;   //将此时的长度赋值为最长的长度
                startIndex = nowStart;   //将此时的下标赋值为开始的下标
            }
            nowLen = 1;   //此时的长度重置(计数器返回为1)
            nowStart = i;   //此时的下标赋值为循环到的下标
        }
    }

    if (nowLen > maxLen)    //如果遇见到结尾还没有断的递增数列
    {
        maxLen = nowLen;   
        startIndex = nowStart;
    }

    result[0] = maxLen;
    result[1] = startIndex;
}

题二:

答案:

#include <stdio.h>

void encode(char* str, int n) 
{
    int j = 0, len = 0, i = 0;
    while (str[j] != '\0')   //循环至结束符\0之前
    {
        len++;   //长度计数器+1
        j++;      //下标+1
    }
    for (i = 0; i < len; i++) 
    {
        if (str[i] >= 'a' && str[i] <= 'z')    //如果是小写字母
        {
            str[i] = ((str[i] - 'a' + n) % 26) + 'a';   //后移n位(%26是让xyz变为abc)
        }
        else if (str[i] >= 'A' && str[i] <= 'Z')    //如果是大写字母
        {
            str[i] = ((str[i] - 'A' + n) % 26) + 'A';    //后移n位(%26是让XYZ变为ABC)
        }
    }
}

int main() 
{
    char str[80];
    int n;
    scanf("%d%s", &n, str);
    encode(str, n);
    puts(str);
    return 1;
}

文章来源:https://blog.csdn.net/2301_80369371/article/details/134980697
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。