• 求n以内最大的k个素数以及它们的和、数组元素循环右移问题、求最大值及其下标、将数组中的数逆序存放、矩阵运算


    7-51 求n以内最大的k个素数以及它们的和 (20 分)

    本题要求计算并输出不超过n的最大的k个素数以及它们的和。

    输入格式:
    输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。

    输出格式:
    在一行中按下列格式输出:

    素数1+素数2+…+素数k=总和值
    其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

    输入样例1:

    1000 10
    

    输出样例1:

    997+991+983+977+971+967+953+947+941+937=9664
    

    输入样例2:

    12 6
    

    输出样例2:

    11+7+5+3+2=28
    
    #include <stdio.h>
    int main() {
        int sam(int p);
        int n, k, count = 0, sum = 0, i;
        scanf("%d %d", &n, &k);
        for(i = n-1; i > 1; i--) {
            if(sam(i)) {
                count++;
                if(count == 1) {
                    printf("%d", i);
                }else {
                    printf("+%d", i);
                }
                sum = sum+i;
            }
            if(count == k) break;
        }
        printf("=%d", sum);
        return 0;
    }
    int sam(int p) {
        int i;
        if(p == 1) return 0;
        for(i = 2; i <= p/2; i++) {
            if(p%i == 0) {
                return 0;
            }
        }
        return 1;
    }
    

    7-52 数组元素循环右移问题 (20 分)

    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯A​N−M−1​​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
    输入格式:

    每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
    输出格式:

    在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
    输入样例:

    6 2
    1 2 3 4 5 6
    

    输出样例:

    5 6 1 2 3 4
    
    #include <stdio.h>
    int main()
    {
    	int n,m,i;
    	scanf("%d %d",&n,&m);
    	if(n<=100&&n>=1){
    		int sam[n];
    		for(i=0;i<n;i++){
    			m=m%n;
    			scanf("%d",&sam[m]);
    			m++;
    		}
    		int count=1;
    		for(i=0;i<n;i++){
    			printf("%d",sam[i]);
    			if(count<n){
    				printf(" ");
    				count++;
    			}
    		}
    	}
    	return 0;
    }
    

    7-53 求最大值及其下标 (20 分)

    本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
    输入格式:

    输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
    输出格式:

    在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
    输入样例:

    6
    2 8 10 1 9 10
    

    输出样例:

    10 2
    
    #include <stdio.h>
    int main()
    {
    	int n,i,t=0;/*假设a[t]是最大值,即下标为0的元素最小*/ 
    	scanf("%d",&n);
    	int a[n];
    	for(i=0;i<n;i++){
    		scanf("%d",&a[i]);
    	}/*找最大值a[t]*/ 
    	for(i=1;i<n;i++){
    		if(a[i]>a[t]){/*如果a[i]比假设的最大值还大*/ 
    			t=i;/*再假设a[i[是新的最大值,即下标为i的元素最大*/
    		}
    	}
    	printf("%d %d",a[t],t);
    	return 0;
    }
    

    7-54 将数组中的数逆序存放 (20 分)

    本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
    输入格式:

    输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
    输出格式:

    在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
    输入样例:

    4
    10 8 1 2
    

    输出样例:

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

    7-55 矩阵运算 (20 分)

    给定一个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>
    int main(){
        int n, arr[10][10], i, j;
        int sum=0;
        scanf("%d", &n);
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                scanf("%d", &arr[i][j]);
                if(i!=n-1 && j!= n-1 && i+j!=n-1){
                    sum += arr[i][j];
                }
            }
        }
        printf("%d
    ", sum);
        return 0;
    }
    
    欢迎查阅
  • 相关阅读:
    递归
    排序算法的稳定性与复杂度总结
    二分查找
    希尔排序
    快速排序
    归并排序
    插入排序
    选择排序
    冒泡排序
    i2c_smbs 函数
  • 原文地址:https://www.cnblogs.com/gh110/p/12158258.html
Copyright © 2020-2023  润新知