数组pta总结

Posted fetterslove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组pta总结相关的知识,希望对你有一定的参考价值。

方法:第一步:先把main函数里的输入写出
              第二步:根据所需的功能写出函数(....,.....)里面的实参先写一部分,根据后面写函数所需的再补全
                  第三步:输出;
              函数:先定义再调用
 pta2,3,4,10,13,15未写。
01 查找指定字符 
 

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming
 

输出样例1:

index = 7
 

输入样例2:

a
1234
 

输出样例2:

Not Found
技术图片   

 1 #include<stdio.h>
 2 void search(char strsource[],char c)//设成void输出就不用在主函数设成int就要交给主函数或其他函数
 3 {
 4     int i=0;
 5     int indexpos=-1;//
 6     while(strsource[i]!=‘‘)//次数未知
 7     {
 8         //看当前的字符是不是要找的字符
 9         if(strsource[i]==c)
10         {
11             indexpos=i;
12          } 
13          i++;
14      } 
15      //字符是存在,不存在
16      if(indexpos==-1)
17      {
18          printf("Not Found
");
19       } 
20       else
21       {
22           printf("index = %d
",indexpos);
23       }
24 }
25 int main()
26 {
27     char c;
28     char strsource[81];//空字符
29     c=getchar();
30     getchar();
31     gets(strsource);//gets和scanf(%s)放的字符串,最后一个元素都是自动填上斜杠0。但最好用gets(钉钉老师所讲)
32     search(strsource,c); //传递的数组名首地址
33 }
总结:循环字符数组时一般用while

 

02 字符转换 
本题要求提取一个字符串中的所有数字字符(‘0‘……‘9‘),将其转换为一个整数输出。

输入格式:

输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:

在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:

free82jeep5
 

输出样例:

825




 1 #include<stdio.h>
 2 int getnumber(char strsource[])
 3 {
 4     int i=0;
 5     int sum=0;
 6     while(strsource[i]!=‘‘)//字符数组一般都是while
 7     {
 8         //取数字
 9         if(strsource[i]>=‘0‘&&strsource[i]<=‘9‘)
10         {
11             sum=sum*10+(strsource[i]-‘0‘);
12          } 
13          i++;
14     }
15     return sum;
16 }
17 int main()
18 {
19     char strsource[81];//留一个位置存放斜杠0字符(联想钉钉上老师的演示)
20     int strnumber;//定义一个变量接收函数返回值
21     gets(strsource);
22     strnumber=getnumber(strsource);
23     printf("%d",strnumber);
24     return 0;
25 }

 

03 删除重复字符 

 

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

 

输入格式:

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

输出格式:

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

输入样例:

ad2f3adjfeainzzzv
 

输出样例:

23adefijnvz
技术图片
 1 #include <stdio.h>
 2 #include <string.h>
 3 //用空代表删除
 4 void delRepeatLetter(char strSource[],int n) 
 5 {
 6     int i;
 7     int j;
 8     for(i=0; i<n; i++)
 9     {
10         if(strSource[i]==‘‘) 
11         {
12             continue;
13         }
14         for(j=i+1; j<n; j++) 
15         {
16             if(strSource[i]==strSource[j]) 
17             {
18                 strSource[j]=‘‘;
19             } 
20         } 
21     } 
22 }
23                 
24 void selectionSort(char strSource[],int n) 
25 {
26     int i,j,t;
27     for(i=0; i<n; i++) 
28     {
29         for(j=i+1;j<n;j++)
30         {
31             if(strSource[i]>strSource[j])
32             {
33                 t=strSource[i];
34                 strSource[i]=strSource[j];
35                 strSource[j]=t;
36             }
37         }
38     }
39 }                
40 void show(char strSource[],int n) 
41 {
42     int i;
43     for(i=0; i<n; i++)
44     {
45         if(strSource[i]!=‘‘)
46         {
47             printf("%c",strSource[i]);
48         }
49     }
50 }
51 int main()
52 {
53     char strSource[81];
54     int strLen;
55     gets(strSource);
56     strLen=strlen(strSource);
57     delRepeatLetter(strSource,strLen);
58     selectionSort(strSource,strLen);
59     show(strSource,strLen);
60 }
总结:删除字符的方法斜杠0,而且这里有两个功能函数,不可能在其中一个进行输出,所以还要再定义一个功能函数做输出
一般有两个及其以上的功能函数则要设计一个输出函数。
04 统计一行文本的单词个数
 

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

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let‘s go to room 209.
 

输出样例:

5
 1 #include <stdio.h>
 2 #include <string.h>
 3 void wordCounter(char sentence[]) 
 4 {
 5     char newSentece[1000]=" ";
 6     int counter=0;
 7     int i=0;
 8     strcat(newSentece,sentence);
 9     while(newSentece[i]!=‘‘) 
10     {
11         if(newSentece[i-1]==‘ ‘&&newSentece[i]!=‘ ‘) 
12         {
13             counter++;
14         }
15         i++;
16     }
17     printf("%d",counter);
18 }
19 int main() 
20 {
21     char sentence[1000];
22     gets(sentence);
23     wordCounter(sentence);
24 }

05 字符串字母大小写转换
 本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:

在一行中输出大小写转换后的结果字符串。

输入样例:

Hello World! 123#
 

输出样例:

hELLO wORLD! 123
 1 #include <stdio.h>
 2 #include <string.h>
 3 void chageUpLower(char strSource[])
 4 {
 5     int i=0;
 6     while(strSource[i]!=‘#‘)
 7     {
 8     if(strSource[i]>=‘a‘ && strSource[i]<=‘z‘)
 9     {
10        strSource[i]=strSource[i]-(‘a‘-‘A‘);
11     }
12     else if(strSource[i]>=‘A‘ && strSource[i]<=‘Z‘)
13     {
14         strSource[i]=strSource[i]+(‘a‘-‘A‘);
15     }
16     i++;
17     }
18 }
19     void show(char strSource[])
20     {
21     int i=0;
22     while(strSource[i]!=‘#‘)
23     {
24     printf("%c",strSource[i]);
25     i++;
26     } 
27 }
28 int main()
29 {
30    char strSource[32];//# ‘‘一定要注意这里pta有要求
31    gets(strSource);
32    chageUpLower(strSource);
33    show(strSource);
34 }
总结:这里如果把show函数写到第一功能函数会冗杂;所以再设一个输出函数,看上去美观

 

 

06 交换最小值和最大值 

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:

输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:

在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:

5
8 2 5 1 4
 

输出样例:

1 2 5 4 8 
 1 #include <stdio.h>
 2 void changePos(int listArray[],int n) 
 3 {
 4     int minPos=0;
 5     int maxPos=0;
 6     int i;
 7     int temp;
 8     for(i=1; i<n; i++) 
 9     {
10         if(listArray[i]<listArray[minPos]) 
11         {
12             minPos=i;把最小值的下标存到minpos里
13         }
14         if(listArray[i]>listArray[maxPos]) 
15         {
16             maxPos=i;//把最大值的下标存到maxpos里
17         }
18     }
19     temp=listArray[minPos];
20     listArray[minPos]=listArray[0];
21     listArray[0]=temp;
22     if(maxPos!=0) 
23     {
24         temp=listArray[maxPos];
25         listArray[maxPos]=listArray[n-1];
26         listArray[n-1]=temp;
27     } 
28     else 
29     {
30         temp=listArray[minPos];
31         listArray[minPos]=listArray[n-1];
32         listArray[n-1]=temp;
33     }
34 }
35 void printArray(int listArray[],int n) 
36 {
37     int i;
38     for(i=0; i<n; i++) 
39     {
40         printf("%d ",listArray[i]);
41     }
42 }
43 void main() 
44 {
45     int N;
46     int listArray[10];
47     int i;
48     scanf("%d",&N);
49     for(i=0; i<N; i++) 
50     {
51         scanf("%d",&listArray[i]);
52     }
53     changePos(listArray,N);
54     printArray(listArray,N);
55 }

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

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

3 4
技术图片
 1 #include <stdio.h>
 2 void show(int sourceArray[],int n,int data) 
 3 {
 4     int i=0;
 5     int counter=0;
 6     printf("%d ",data);
 7     for(i=0; i<n; i++) 
 8     {
 9         if(sourceArray[i]==data) 
10         {
11             counter++;
12         }
13     }
14     printf("%d",counter);
15 }
16 int getMaxTimesPos(int counterArray[],int n) 
17 {
18     int maxPos=0;
19     int i;
20     for(i=0; i<n; i++) //找出重复次数最多的那个数对应的下标;
21     {
22         if(counterArray[i]>counterArray[maxPos]) 
23         {
24             maxPos=i;
25         }
26     }
27     return maxPos;
28 }
29 int getMax(int sourceArray[],int n) 
30 {
31     int i,j;
32     int counterArray[1000]= {0};
33     int copyArray[1000];
34     int maxCounterPos;
35     for(i=0; i<n; i++) 
36     {
37         copyArray[i]=sourceArray[i];
38     }
39     for(i=0; i<n; i++) 
40     {
41         counterArray[i]=0;
42         for(j=0; j<n; j++) 
43         {
44             if(copyArray[i]==sourceArray[j]) 
45             {
46                 counterArray[i]++;
47             }
48         }
49     }
50     maxCounterPos=getMaxTimesPos(counterArray,n);//这里因为所传的参数不在主函数里,所以在这个函数执行才行,先定义在调用
51     show(sourceArray,n,sourceArray[maxCounterPos]);
52 }
53 int main() 
54 {
55     int N;
56     int i;
57     int sourceArray[1000];
58     scanf("%d",&N);
59     for(i=0; i<N; i++) 
60     {
61         scanf("%d",&sourceArray[i]);
62     }
63     getMax(sourceArray,N);
64     return 0;
65 }
总结:设一个新的数组变量存放一些所要的值,注意有些功能函数在功能函数里,因为其所传的参数在其中。

 

08 找最长的字符串 
 

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

输入格式:

输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:

在一行中用以下格式输出最长的字符串:

The longest is: 最长的字符串
 

如果字符串的长度相同,则输出先输入的字符串。

输入样例:

5
li
wang
zhang
jin
xiang
 

输出样例:

The longest is: zhang
 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     char strSource[1000][80];
 6     int i,j;
 7     int N;
 8     int longestIndex=-1;
 9     int maxlenth=-1;
10     int strLenth;
11     scanf("%d",&N);
12     getchar();
13     for(i=0;i<N;i++)
14     {
15        gets(strSource[i]);
16        strLenth=strlen(strSource[i]);
17        if(strLenth>maxlenth)
18        {
19             longestIndex=i;//一个变量放最长字符串对应的下标
20             maxlenth=strLenth;//一个变量放当前比它长的字符串的值
21        } 
22     }
23     printf("The longest is: %s",strSource[longestIndex]);
24 }
总结:找出最长字符串对应的下标见上文

 

 
09-冒泡法排序
 

N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<),输出扫描完第K遍后的中间结果数列。

输入格式:

输入在第1行中给出N和K(1),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

6 2
2 3 5 1 6 4
 

输出样例:

2 1 3 4 5 6
#include<stdio.h>
void bubble(int arr[],int len) 
{
    int i;
    int temp;
    for(i=0; i<len-1; i++) //len是传进来值,不能再对其改变
    {
        if(arr[i]>arr[i+1]) 
        {
            temp=arr[i];
            arr[i]=arr[i+1];
            arr[i+1]=temp;
        }
    }
}
void bubble_sort(int arr[],int len,int K) 
{
    int i;
    int bullbleTimes=K;
    for(i=1; i<=bullbleTimes; i++) 
    {
        bubble(arr,len--);
    }
}
void show(int arr[],int len) 
{
    int i ;
    for (i = 0; i <len; i++) 
    {
        if(i==len-1) 
        {
            printf("%d",arr[i]);
        } 
        else 
        {
            printf("%d ",arr[i]);
        }
    }
    printf("
");
}
int main() 
{
    int N,K;
    int arr[100];
    int i;
    scanf("%d%d",&N,&K);
    for(i=0; i<N; i++) 
    {
        scanf("%d",&arr[i]);
    }
    bubble_sort(arr,N,K);//排序
    show(arr,N);//排序后

    return 0;
}

以上是关于数组pta总结的主要内容,如果未能解决你的问题,请参考以下文章

PTA乙级 (1049 数列的片段和 (20分))

PTA题集4-6总结

C博客作业--指针

PTA团体程序设计天梯赛-练习集 L2题目总结(完)

[code] PTA 胡凡算法笔记 DAY039

PTA题目集1~3的总结