精华内容
下载资源
问答
  • 质数的概念,以及c程序求位数中质数的个数

    一、什么是质数(素数)

    1. 概念
      质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。质数又称素数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,否则成为合数。
    2. 基本判断方法
      对正整数n,如果用2到n的平方根之间所有整数去除,均无法整除,则n为质数。质数大于等于2,且不能被它本身和1以外的整数整除

    二、求三位数中质数的个数

    1. 代码
    #include <stdio.h>
    #include <math.h>
    int judge(int n);
    int main()
    {
        int cnt=0;
        for(int i=100; i<1000; i++) if(judge(i)==1) cnt+=1;
        printf("%d\n",cnt);
        return 0;
    }
    
    int judge(int n)
    {
        if(n==1) return 0;
        if(n==2) return 1;
        for(int i=2; i<(int)sqrt(n)+1; i++)
            if(n%i==0) return 0;
        return 1;
    }
    
    1. 运行结果
      在这里插入图片描述
    展开全文
  • 给出一组无序整数,中位数,如果最中间两个数的平均数,向下取整即可(不需要使用浮点数) 输入描述: 该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=...

     

     

     

    题目描述

    中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

    输入描述:

    该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
    接着N行为N个数据的输入,N=0时结束输入

    输出描述:

    输出中位数,每一组测试数据输出一行

    示例1

    输入

    复制

    4
    10
    30
    20
    40
    3
    40
    30
    50
    4
    1
    2
    3
    4
    0
    

    输出

    复制

    25
    40
    2

    #include<stdio.h>

    #include<string.h>

    void qsort(int a[], int left, int right)

    {

        int low,high;

        low = left;

        high = right;

        int key = a[low];

        if(left>=right)

        {

            return ;

        }

        while(low<high)

        {

            while(low<high&&a[high]>=key)

            {

                high--;

            }

            a[low]=a[high];

            while(low<high&&a[low]<=key)

            {

                low++;

            }

            a[high]=a[low];

        }

        a[low]=key;

        qsort(a,left,low-1);

        qsort(a,low+1,right);

    }

    int main()

    {

        int n;

        int a[10000];

        while(scanf("%d",&n)!=EOF && n!=0)

        {

            for(int i=0;i<n;i++)

            {

                scanf("%d",&a[i]);

            }

            qsort(a,0,n-1);

            if(n%2==0)

            {

                int i=n/2;

                printf("%d\n",(a[i-1]+a[i])/2);

            }

            else

            {

                printf("%d\n",a[n/2]);

            }

        }

        return 0;

    }


    代码二:

    #include<stdio.h>

    #include<stdlib.h>

    int cmp(const void*a,const void*b){

        return *(int *)a-*(int *)b;

    }

    int main(){

        int n;

        int num[10001];

        while(scanf("%d",&n)!=EOF){

            if(!n)break;

            int i;

            for(i=0;i<n;++i){

                scanf("%d",&num[i]);

            }

            qsort(num,n,sizeof(int),cmp);

            if(n%2==0){

                int temp=

                printf("%d\n",(num[n/2]+num[n/2-1])/2);

            }else{

                printf("%d\n",num[n/2]);

            }

        }

    }

    展开全文
  • 问题描述 打印所有不超过n(取n<256)的其平方具有对称性质的...将平方后的(a的)每一进行分解,按从低位到高位的顺序依次暂存到数组,再将数组的元素按照下标从大到小的顺序重新将其组合成一个众(如.

    问题描述

    打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)。

     

    问题分析

    对于要判定的数n计算出其平方后(存于a),按照“回文数”的定义要将最高位与最低位、次高位与次低位……进行比较,若彼此相等则为回文数。此算法需要知道平方数的位数,再一一将每一位分解、比较,此方法对于位数已知且位数不是太多的数来说比较适用。

    此问题可借助数组来解决。将平方后的(a的)每一位进行分解,按从低位到高位的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新将其组合成一个数众(如n=15,则a=225且k=522),若k等于n×n则可判定n为回文数。

     

    算法设计

    从低位到高位将某一整数拆分。对于一个整数(设变量名为a)无论其位数多少,若欲将最低位拆分,只需对10进行求模运算a%10,拆分次低位首先要想办法将原来的次低位作为最低位来处理;

    用原数对10求商可得到由除最低位之外的数形成的新数,且新数的最低位是原数的次低位,根据拆分最低位的方法将次低位求出a/10、a%10,对于其他位上的数算法相同。

    利用这个方法要解决的一个问题就是,什么情况下才算把所有数都拆分完?

    当拆分到只剩原数最高位时(即新数为个位数时),再对10求商的话,得到的结果肯定为0,可以通过这个条件判断是否拆分完毕。

    根据题意,应将每次拆分出来的数据存储到数组中,原数的最低位存到下标为0的位置,次低位存到下标为1的位置……依次类推。

    ————————

    程序段如下:

    for (i=0; a!=0; i++)
    
    {
    
        m[i] = a % 10;
    
        a /= 10;
    
    }

    将数组中元素重新组合成一新数。

    拆分时变量a的最高位仍然存储在数组中下标最大的位置,根据“回文数”定义,新数中数据的顺序与a中数据的顺序相反;

    所以我们按照下标从大到小的顺序分别取出数组中的元素组成新数k,由几个数字组成一个新数时只需用每一个数字乘以所在位置对应的权值然后相加即可;

    在编程过程中应该有一个变量t来存储每一位对应的权值,个位权值为1,十位权值为10,百位权值为100……,所以可以利用循环,每循环一次t的值就扩大10倍。

    对应程序段如下:

    for( ; i>0; i--)
    
    {
    
        k += m[i-l] * t;
    
        t *= 10;
    
    }
    
    ————————
    
    下面是完整的代码:
    
    #include<stdio.h>
    
    int main()
    
    {
    
        int m[16], n, i, t, count=0;
    
        long unsigned a, k;
    
        printf("No.    number    it's square(palindrome)\n");
    
        for( n=1; n<256; n++ )  /*穷举n的取值范围*/
    
        {
    
            k=0; t=1; a=n*n;  /*计算n的平方*/
    
            for( i=0; a!=0; i++ )  /*从低到高分解数a的每一位存于数组m[1]~m[16]*/
    
            {
    
                m[i] = a % 10;
    
                a /= 10;
    
            }
    
            for(; i>0; i--)
    
            {
    
                k += m[i-1] * t;  /*t记录某一位置对应的权值 */
    
                t *= 10;
    
            }
    
            if(k == n*n)
    
                printf("%2d%10d%10d\n", ++count, n, n*n);
    
        }
    
        return 0;
    
    }

     

    运行结果:

    No.    number    it's square(palindrome)
    
    1        1        1
    
    2        2        4
    
    3        3        9
    
    4        11      121
    
    5        22      484
    
    6        26      676
    
    7      101    10201
    
    8      111    12321
    
    9      121    14641
    
    10      202    40804
    
    11      212    44944

    最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

    【值得关注】我的 C/C++编程学习交流俱乐部 【点击进入】

    问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

    展开全文
  • 问题分析互不相同的三位数,可以一位一位的去确定,先确定百位、再确定十位、个位,再将各位上的数值进行比较,若互不相同则输出。算法设计1) 利用多重循环嵌套的for语句实现。2) 用三重循环分别控制百位、十位、...

    问题描述

    用1、2、3、4共4个数字能组成多少个互不相同且无重复数字的三位数?都是多少?

    问题分析

    求互不相同的三位数,可以一位一位的去确定,先确定百位、再确定十位、个位,再将各位上的数值进行比较,若互不相同则输出。

    算法设计

    1) 利用多重循环嵌套的for语句实现。

    2) 用三重循环分别控制百位、十位、个位上的数字,它们都可以是1、2、3、4。

    3) 在已组成的排列数中,还要再去掉出现重复的1、2、3、4这些数字的不满足条件的排列。

    题目要求最后输出满足条件的数据个数,需要一个变量count充当计数器的作用,有一个满足条件的数据出现计数器的值加1。为了使每行能输出8个数字,每输出一个数字就对count的值进行判断看是否能被8整除,若能整除则输出换行符。

    if (count%8==0)

    printf("\n");

    下面是完整的代码:

    #include

    int main()

    {

    int i, j, k, count=0;

    for(i=1; i<5; i++)

    for(j=1; j<5; j++)

    for(k=1; k<5; k++)

    {

    if(i!=k && i!=j && j!=k) /*判断三个数是否互不相同*/

    {

    count++;

    printf("%d%d%d ", i, j, k);

    if(count%8 == 0) /*每输出8个数换行*/

    printf("\n");

    }

    }

    printf("\nThe total number is %d.\n", count);

    return 0;

    }

    运行结果:

    123  124  132  134  142  143  213  214

    231  234  241  243  312  314  321  324

    341  342  412  413  421  423  431  432

    The total number is 24.

    知识点补充

    上面程序段的效率较低,因为无论i与j的值是否相等,k都要从1〜4把所有值遍历完,根据题目要求只要i与j的值相等,那么k的取值就没必要进行,因为无论k的值是多少,最后组成的三位数中总有相同的数字。对于本题来说,因取值范围较小,所以算法效率的高低相差并不大,但是对于取值范围大的题目,两种算法效率相差是很明显的。

    程序代码改写如下:

    #include

    int main ()

    {

    int i, j, k, count=0;

    for(i=1; i<5; i++)

    for(j=1; j<5; j++)

    for(k=1; k<5 && j!=i; k++)

    {

    if(k!=j && k!=i)

    {

    printf("%d%d%d", i, j, k);

    count++;

    if(count%8==0)

    printf ("\n");

    }

    }

    printf("\nThe total number is %d.\n", count);

    return 0;

    }

    展开全文
  • 习题7-2 一批整数出现最多的个数字 (20分) 给定一批整数,分析每个整数的每一数字,出现次数最多的个数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: ...
  • 写一个程序打印指定数字的二进制 1 的个数,比如:15 (0000 1111) 输出4下面是三种方式:①通过模2除2(%2、/2)的方法num%2——取出二进制的最后一num/2——去掉二进制的最后一通过while循环,依次取出二进制...
  • 7-28 整数的位数及各位数字之和 (15 分) 对于给定的正整数N,它的位数及其各位数字之和。 输入格式: 输入在一行给出一个不超过10^9的正整数N。 输出格式: 在一行输出N的位数及其各位数字之和,中间用一个...
  • 给定一批整数,分析每个整数的每一数字,出现次数最多的个数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行给出正整数N(≤1000),在第二行...
  • C语言数据结构——多位数表达式的值 表达式值是程序设计语言编译的一个最基本问题。它的实现是栈应用的一个典型例子。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include&...
  • c语言求三个数字最大的那个

    千次阅读 2012-11-24 11:53:39
     学单片机学STM32学ARM越学越觉得c语言的重要性,所以我决定把我大一的c语言课本程序都敲一遍把课后题都独立编出来,虽然对个大神来说这太小儿科,可谁又是一出生就是一高手呢!多想无益踏踏实实的把最小的...
  • 编写一个程序,从输入的4个整数找出最大值和最小值。要求只能使用4条if语句。 输入描述 在一行输入4个整数,以空格分隔。 输出描述 在一行按照格式“Largest = xxx, Smallest = xxx”输出所的值。 输入样例 ...
  • 给定一批整数,分析每个整数的每一数字,出现次数最多的个数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行给出正整数N(≤1000),在第二行...
  • #include <stdio.h> #define MAXN 10 int main() { int n, number, index, Times, i; int a[MAXN] = {0}; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &...
  • 一批整数出现最多的个数字 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:徐镜春(浙江大学) 题目描述: 给定一批整数,分析每个整数的每一数字,出现次数最多的...
  • C语言程序设计

    2019-04-07 12:22:08
    程序设计和C语言【例1】要求在屏幕上输出下列一行信息。【例2】两个整数的和。【例3】两个整数的较大者。【例1】华氏温度与摄氏温度的转换【例2】计算存款利息【例3】给定一个大写字母,要求用小写字母输出...
  • 本题要求实现一个函数,N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType。 函数接口定义: ElementType Median( ElementType A[], int N ); 其中给定集合元素...
  • C语言程序设计基础;回顾分支结构;if/else if语句;switch语句流程图;第二章循环结构;for语句回顾;while循环语句;for与while对比;while语句应用 I ;用格雷戈里公式;while语句应用 II ;统计学生成绩;do-while语句;...
  • 首先,我们要分析9出现的位置,在0到100之间,就会出现在个及十, 当9处于个时,可以模来计算,即i%10 当9处于十时,可以用/10来计算(要定义i为int型) ...
  • (7)教材第5章编程题第11题:编写程序实现将用户输入的两位数转化为英文。 说明:本题考查switch语句的应用。 (8)教材第6章编程题第8题:编写程序显示单月日历,用户指定这个月的天数和该月起始日是星期几。 ...
  • 水仙花(Narcissistic number)也被称为超完全数字不变数(pluperfect digital ...C#100-999之内的水仙花数程序:《C#趣味程序---水仙花》 在DEV编写程序,结果如下所示: C语言程序: #include&l.
  • 任何一个各位数字不全相同的三位数,经有限次“重排差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。) 例如...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 352
精华内容 140
关键字:

c语言程序求中位数

c语言 订阅