数组字符串_习题

目录

1.求整数序列中出现次数最多的数

2.凯撒密码(其中一种ji

3.要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。(注意:给定字符可能是非常规字符)

4.字符串排序

5.统计一行文本的单词个数

6.删除字符串中的指定字母

7.螺旋数阵


1.求整数序列中出现次数最多的数

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:

输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:

在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

结尾无空行

输出样例:3 4

#include <stdio.h>
int main ()
{int n;scanf("%d",&n);int a[n],b[n];int i,j,k,l;for(i=0;i<n;i++){scanf("%d",&a[i]);b[i]=1;}for(i=0;i<n;i++){for(j=0;j<n;j++){if(a[j]==a[i]){b[i]++;}}}int count=0,max=0;for(k=0;k<n;k++){if(b[k]>count){count=b[k]-1;max=a[k];}}printf("%d %d",max,count);return 0;
}

2.凯撒密码(其中一种ji

为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于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 () {char arr[81];int offset,i=0;gets(arr);scanf("%d",&offset);for(int i=0;i<strlen(arr);i++){if( isalpha([i])  ){if(  ch[i]>=65&&ch[i]<=90){if( ch[i]+of>=65&&ch[i]+of<=90 ) ch[i]+=of;else if(ch[i]+of>90) ch[i]=ch[i]+of-26;else if(ch[i]+of<65) ch[i]=ch[i]+of+26;   }if(  ch[i]>=97&&ch[i]<=122){if( ch[i]+of>=97&&ch[i]+of<=122 ) ch[i]+=of;else if(ch[i]+of>122) ch[i]=ch[i]+of-26;else if(ch[i]+of<97) ch[i]=ch[i]+of+26;   }	}printf("%c",ch[i]);}}

3.要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。(注意:给定字符可能是非常规字符)

输入格式:

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

输出格式:

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

输入样例:

ad2f3ad j feain  zzzv

输出样例:

注意给字符串去重:设置去重函数

#include <stdio.h>
#include <string.h>
#include <math.h>void removeDuplicate(char str[]);//给字符串去重 int main()
{char s[81],t;int i,j,sum;gets(s);removeDuplicate(s);sum=strlen(s);for(i=0; i<sum-1; i++)for(j=0; j<sum-i-1; j++)if(s[j+1]<=s[j]){t=s[j];s[j]=s[j+1];s[j+1]=t;}puts(s);return 0;
}void removeDuplicate(char str[]) 
{int len = strlen(str);int p = 0;int i;int j;for (i=0; i<len; i++) {if (str[i] != '\0') {str[p++] = str[i];for (j=i+1; j<len; j++) {if (str[i] == str[j]) {str[j] = '\0';}}}}str[p] = '\0';
}

4.字符串排序

本题要求编写程序,读入n个字符串,按由小到大的顺序输出。

输入格式:

先输入一个数字n,再输入由空格分隔的n个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:

每行一个字符串

输入样例:

5

red yellow blue black white

结尾无空行

输出样例:

After sorted:

black

blue

red

white

yellow

结尾无空行

#include<stdio.h>
#include<string.h>
#define M 80 
#define N 5
int main()
{char str[N][M],t[N][M];int i,j;for(i=0;i<5;i++){scanf("%s",&str[i]);}for(i=0;i<4;i++){for(j=i+1;j<5;j++){if(strcmp(str[i],str[j])>0)//选择排序法 {strcpy(t[i],str[i]);strcpy(str[i],str[j]);strcpy(str[j],t[i]);}}}printf("After sortec:\n");for(i=0;i<5;i++){printf("%s\n",str[i]);}		} 

5.统计一行文本的单词个数

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

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

#include <stdio.h>
int main ()
{char ch;int word=0,count=0;while((ch=getchar())!='\n'){if(ch==' '){word = 0;}else if(word==0){word = 1;count++;}}printf("%d\n",count);return 0;
}

6.删除字符串中的指定字母

删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母

#include <stdio.h>
#include <string.h>
int main()
{char s[128] = {0}, s1[128] = {0}, ch;int i = 0, j = 0;printf("请输入字符串:");scanf("%s",s);fflush(stdin);printf("请输入要删除的字符:");scanf("%c",&ch);for (i = 0; i < strlen(s); i++){if (s[i] == ch)continue;s1[j++] = s[i];}printf("%s",s1);return 0;
}

7.螺旋数阵

所谓“螺旋方阵”,是指对任意给定的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>void out(int a[][10],int n,int start)
{int i=0;int j=0;if(start==0){a[start][start]=1;for(j=start+1;j<start+n;++j)a[start][j]=a[start][j-1]+1;}elsefor(j=start;j<n+start;++j)a[start][j]=a[start][j-1]+1;for(i=start+1;i<start+n;++i)a[i][start+n-1]=a[i-1][start+n-1]+1;for(j=start+n-1-1;j>=start;--j)a[start+n-1][j]=a[start+n-1][j+1]+1;for(i=start+n-1-1;i>start;--i)a[i][start]=a[i+1][start]+1;if(n==1||n==0) //阶数为奇数时,边长为一后停止;阶数为偶数时,边长为零后停止。return;elseout(a,n-2,start+1);return;
}int main(void)
{int i=0;int j=0;int n=0;int a[10][10]={0};int start=0;scanf("%d",&n);out(a,n,start);for(i=0;i<n;++i)for(j=0;j<n;++j)if(j==n-1)printf("%3d\n",a[i][j]);elseprintf("%3d",a[i][j]);return 0;
}

 另解:

#include<stdio.h>
int main()
{int n;scanf("%d",&n);int arr[n][n],i,j,k=1,c=n-1,x=0,y=0;for(i=0;i<n/2;i++){for(j=0;j<c;j++) arr[x][y++] = k++;for(j=0;j<c;j++) arr[x++][y] = k++;for(j=0;j<c;j++) arr[x][y--] = k++;for(j=0;j<c;j++) arr[x--][y] = k++;x++;y++;c-=2;}if(n%2) arr[n/2][n/2] = k;for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%3d",arr[i][j]);}printf("\n");}} 

深入讨论:(7条消息) 螺旋矩阵_chivalry-CSDN博客_螺旋矩阵

本文链接:https://my.lmcjl.com/post/11916.html

展开阅读全文

4 评论

留下您的评论.