PTA c#PTA函数数组练习答案【程序设计基础】

目录

7-1 矩阵运算

7-2 统计一行文本的单词个数

7-3 螺旋方阵

7-4 删除重复字符

7-5 统计字符出现次数

7-6 谷歌的招聘

7-7 凯撒密码


7-1 矩阵运算

给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:

输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例:

35
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int n,i,j,sum;
	sum=0;
	int a[10][10];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	} 
    for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if((j+1)!=n&&(i+j)!=n-1&&(i+1)!=n){
				sum=sum+a[i][j];
			}
			else continue;
	}
}
	printf("%d",sum);
	return 0;
}

 

7-2 统计一行文本的单词个数

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int n,len,i;
	char str[10000],ch;
	gets(str);
	len=strlen(str);
	if(str[0]==' ')n=0;
	else n=1;
	for(i=0;i<len-1;i++){
		if(str[i]==' '&&str[i+1]!=' ')
		n++;
	}
	printf("%d\n",n); 
	return 0;
}

 

7-3 螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

输出样例:

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9
#include<stdio.h>
int main(){
    int n,i=0,j,c=0;
    scanf("%d",&n);
    int k=0,l=n-1;     
    int a[n][n];
    while(k<=l){       
        for( j=k ;j<=l;j++) a[k][j]=++c;
        for(i=k+1;i<=l;i++) a[i][l]=++c;
        for(j=l-1;j>=k;j--) a[l][j]=++c;
        for(i=l-1;i>k ;i--) a[i][k]=++c;
        k++;l--;
    }
    
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
           printf("%3d",a[i][j]);
        printf("\n");
    }
}

 

7-4 删除重复字符

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz
#include <stdio.h>
#include <string.h>
#define MAX 81
int main(){
    char str[MAX], temp;
    int i, j, len, minPos;
    gets(str);
    len = strlen(str);
    for(i=0; i<len; i++){
        //选择排序
        minPos = i;
        for(j=i+1; j<len; j++){
            if(str[j]<str[minPos]){
                minPos = j;
            }
        }
        if(minPos!=i){
            temp = str[i];
            str[i] = str[minPos];
            str[minPos] = temp;
        }
    }
    printf("%c", str[0]);
    for(i=1; i<len; i++){
        if(str[i]!=str[i-1]){
            printf("%c", str[i]);
        }
    }

    return 0;
}

 

7-5 统计字符出现次数

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:

输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:

在一行中输出给定字符在给定字符串中出现的次数。

输入样例:

programming is More fun!
m

输出样例:

2
#include<stdio.h>
int main(){
    char str[80],ch,a;
    int i=0,n=0,len;
    gets(str);
	len=strlen(str);
    scanf("%c",&a);
    for(i=0;i<len;i++){
    	if(a==str[i])n++;
	}
	printf("%d",n);
}

 

7-6 谷歌的招聘

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819

输出样例 1:

49877

输入样例 2:

10 3
2468001680

输出样例 2:

404
#include <stdio.h>
#include <string.h>
int isPrime(int n)
{
 int i;
 if(n < 2) return 0;
 if(n == 2) return 1;
 if(n%2 == 0)return 0;
 for(i=3; i*i<=n; i++)
  if(n%i == 0)
   return 0;
 return 1;
}

int main()
{
 int l,k,i;
 long num=0;
 char s[1001]="",res[10]="";
 scanf("%d%d%s",&l,&k,s);
 for(i=0; i<=l-k; i++)
 {
  strncpy(res,s+i,k);
  sscanf(res,"%ld",&num);
  if(isPrime(num))
  {
   puts(res);
   return 0;
  }
 }
 puts("404");
 return 0;
}

 

7-7 凯撒密码

为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。

输入格式:

输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。

输出格式:

输出加密后的结果字符串。

输入样例1:

Hello Hangzhou
2

输出样例1:

Jgnnq Jcpibjqw

输入样例2:

a=x+y
-1

输出样例2:

z=w+x
#include<stdio.h>
#include<string.h>
int main(void)
{
 char str[80];
 int i,len,offset;
 gets(str),len=strlen(str);
 scanf("%d",&offset),offset=offset%26;
 for(i=0;i<len;i++){
  if('a'<=str[i]&&str[i]<='z')
  {
   if(0<=offset)str[i]=((str[i]-'a')+offset)%26+'a';
   else str[i]=((str[i]-'a')+26+offset)%26+'a';
  }
  else if('A'<=str[i]&&str[i]<='Z')
  {
   if(0<=offset)str[i]=((str[i]-'A')+offset)%26+'A';
   else str[i]=((str[i]-'A')+26+offset)%26+'A';
  }
 }
 puts(str);
 return 0;
} 
PTA_基础编程答案_整章 包括但不限于如下 7-1 厘米换算英尺英寸 15 27785 103313 0.27 7-2 然后是几点 15 20063 78572 0.26 7-3 逆序的三位数 10 24732 62644 0.39 7-4 BCD解密 10 14066 23357 0.60 7-5 表格输出 5 15169 36439 0.42 7-6 混合类型数据格式化输入 5 15719 36076 0.44 7-7 12-24小时制 15 14687 51855 0.28 7-8 超速判断 10 15328 39238 0.39 7-9 用天平找小球 10 15145 33252 0.46 7-10 计算工资 15 14241 35238 0.40 7-11 分段计算居民水费 10 12907 35261 0.37 7-12 两个数的简单计算器 10 12912 33359 0.39 7-13 日K蜡烛图 15 9280 34024 0.27 7-14 求整数段和 15 11461 55664 0.21 7-15 计算圆周率 15 9826 33135 0.30 7-16 求符合给定条件的整数集 15 8986 21898 0.41 7-17 爬动的蠕虫 15 9739 24881 0.39 7-18 二分法求多项式单根 20 7282 31752 0.23 7-19 支票面额 15 7375 21837 0.34 7-20 打印九九口诀表 15 10325 35138 0.29 7-21 求特殊方程的正整数解 15 7799 22600 0.35 7-22 龟兔赛跑 20 7446 29142 0.26 7-23 币值转换 20 4333 18467 0.23 7-24 约分最简分式 15 6728 15335 0.44 7-25 念数字 15 6724 20180 0.33 7-26 单词长度 15 5648 37409 0.15 7-27 冒泡法排序 20 7255 24045 0.30 7-28 猴子选大王 20 6144 13327 0.46 7-29 删除字符串中的子串 20 4798 15074 0.32 7-30 字符串的冒泡排序 20 4752 14741 0.32 7-31 字符串循环左移 20 4527 13605 0.33 7-32 说反话-加强版 20 4030 25470 0.16 7-33 有理数加法 15 4476 10862 0.41 7-34 通讯录的录入与显示 10 4323 19524 0.22 7-35 有理数均值 20 3281 17202 0.19 7-36 复数四则运算 15 2530 10103 0.25 7-37 整数分解为若干项之和 20 2437 4673 0.52 7-38 数列求和-加强版 20 4692 35190 0.13 当前显示1 - 38项,共38项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值