PTA数组

目录

1.判断上三角矩阵​

2.求矩阵各行元素之和

3.交换最小值和最大值

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

5.字符转换

6. 删除重复字符 

7.字符串字母大小写转换

8. 找最长的字符串

 9.输出数组元素

*10.找出不是两个数组共有的元素

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

 *12冒泡法排序


1.判断上三角矩阵

#include <stdio.h>
int main ()
{
	int t,n,i,j,k;
	int a[10][10];
	scanf("%d",&t);
	int count = 0;
	int b[100] = {0};//记录判断记录 
	
	for(k = 0;k<t;k++)
	{
		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(i>j&&a[i][j]!=0)
				{
					count++;
				}
			}
		}
		if(count==0){
			b[k] = 1;
		} 
		else{
			b[k] = 0;
		}
		count = 0;
	}
	for(k=0;k<t;k++)
	{
		if(b[k]==1){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
	return 0;
}

2.求矩阵各行元素之和

 

#include <stdio.h>
int main ()
{
	int m,n,a[8][8],k,sum=0;
	scanf("%d%d",&m,&n);
	for(int i=0;i<m;i++)
	{
		for(int j = 0;j<n;j++)
		scanf("%d",&a[i][j]); 
	}
	for(int i = 0;i<m;i++)
	{
		sum = 0;
		for(int j =0;j<n;j++)
		sum +=a[i][j];
		printf("%d\n",sum);
	}
	return 0;
}

3.交换最小值和最大值

 

#include <stdio.h>

int main()
{
	int n,i,min,max,mi,ma,a[10];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	} 
	min=a[0];
	max=a[0];//常规操作,把数组的第一个元素设成最大值和最小值
	for(i=0;i<n;i++){//找出最大和最小值
		if(a[i]>max){
			max=a[i];
		}
		if(a[i]<min){
			min=a[i];
		}
	}
	int temp;//temp作为交换的桥梁
	for(i=0;i<n;i++){
		if(a[i]==max){
			temp=a[n-1];
			a[n-1]=max;
			a[i]=temp;
		}//交换最大值
	}
	for(i=0;i<n;i++){
		if(min==a[i]){
			temp=a[0];
			a[0]=min;
			a[i]=temp;
		}//交换最小值
	}
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
    return 0;
}
 

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

 

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

5.字符转换

 

 #include <stdio.h>
int main()
{
	int i,b=0;
	char a[100];
	gets(a);
	
	for(i=0;a[i]!='\0';i++)
	{
		if(a[i]>='0'&&a[i]<='9')
		   b = b*10+a[i]-'0';
	}
	printf("%d",b);
}

6. 删除重复字符 

#include<stdio.h>
#include<string.h>
int main()
{
	char a[81];
	gets(a);
	int i,j,l=strlen(a);
	char t;
	for(i=0;i<l-1;i++)
	 for(j=0;j<l-1;j++)
	 {
	 	if(a[j]>a[j+1])
	 	{
	 		t=a[j];
	 		a[j]=a[j+1];
	 		a[j+1]=t;
		  } 
	 }
	 for(i=0;i<l;i++)
	 {
	 	if(a[i]!=a[i+1]) printf("%c",a[i]);
	 }
	 return 0;
 } 

注意:for(i=0;i<l-1;i++),for(j=0;j<l-1;j++),for(i=0;i<l;i++)(遍历)

 

7.字符串字母大小写转换

 

#include <stdio.h>
#include <string.h>
int main()
{
	char a[35];
	gets(a);
	int len = strlen(a);
	a[len - 1] = '\0';
	for (int i = 0; i < len - 1; i++)
	{
		if (a[i] >= 'a' && a[i] <= 'z')
			a[i] -= 32;
	    else if (a[i] >= 'A' && a[i]  <= 'Z')
			a[i] += 32;
	}
	puts(a);
}

8. 找最长的字符串

#include <stdio.h>
#include <string.h>
 int main()
 {
 	int i,n,a=0,max=0,b=0;
 	scanf("%d",&n);
 	char s[n][80];
 	for(i=0;i<n;i++)
 	{
 		scanf("%s",&s[i]);
 		a = strlen(s[i]);
 		if(a>max)
 		{
 			max=a;
 			b=i;
		}
	}
	printf("The longest is: %s",s[b]);
	return 0;
 }

 注意:输入字符串scanf("%s",&s[i])

 9.输出数组元素

 

#include <stdio.h>
int main()
{
	int i;
	int n;
	scanf("%d",&n);
	int a[n];
	
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=1;i<n;i++)
	{
		if(i%3==1)
		printf("%d",a[i]-a[i-1]);
		else 
		printf(" %d",a[i]-a[i-1]);
		if(i%3==0)
		printf("\n");
    }
    return 0;
}

*10.找出不是两个数组共有的元素

 

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

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

 #include<stdio.h>  
  
int main()  
{  
    char str[1001];  
    gets(str);  
    int count=0;  
    int i=0;  
    while(str[i]==' ') //跳过开头的空格  
        i++;  
      
    while(str[i]!='\0')  
    {  
        if(str[i]!=' ')  
        {   
            count++;  
            while(str[i]!=' ') //跳过一个单词的其他字符  
            {  
                if(str[i]=='\0')  //这句很重要,漏掉后出现严重错误  
                    break;  
                i++;      
            }  
        }  
        else  
        {  
            while(str[i]==' ' )  
                i++;      
        }  
    }  
    printf("%d\n",count);  
}

 *12冒泡法排序

 

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

int main()
{
    int i, k, n, m, x;
    scanf("%d %d", &n, &m);
    int *s = (int *)malloc (sizeof(int) * n); //动态分配数组大小
    for(i = 0; i < n; i ++) {
        scanf("%d", &s[i]);
    }
    for(i = 0; i < m; i ++) { //进行m趟排序
        for(k = 0; k < n-i-1; k ++) { 
        //后面的序列是已排序的,所以每一趟减去相应的个数,即n-i-1
            if(s[k] > s[k+1]) {
                x = s[k];
                s[k] = s[k+1];
                s[k+1] = x;
            }
        }
    }
    for(i = 0; i < n-1; i ++) {
        printf("%d ", s[i]);    
    }
    printf("%d", s[i]);

    return 0;
}
#include <stdio.h>
int main()
{
    int a[100];
    int i,j,t;
    int N,K;
    scanf("%d%d",&N,&K);
    for(j=0; j<N; j++)
    {
        scanf("%d",&a[j]);
    }
    for(i=0; i<K; i++)
    {
        for(j=0; j<N-1; j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(j=0; j<N-1; j++)
    {
        printf("%d",a[j]);
        printf(" ");
    }
    printf("%d",a[N-1]);
    return 0;
}


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值