c语言数组,第三题

Posted

tags:

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

c语言数组,第三题第三题,我运行出来有重复,怎么改
#include<stdio.h>
#include<stdlib.h>
#define N 50
main()

int a[50],i,m,b[50],n=0,c=0,x=1;
for(i=1;i<N;i++)
a[i]=rand()%90+10;
b[n]=a[0];
for(n=0;n<N;n++)
for(i=c;i<N;i++)
if(a[i]>b[n])
b[n]=a[i];
a[c]=m;a[c]=a[i];a[i]=m;
c++;
printf("%d ",b[n]);
if(x%10==0)
printf("\n");
x++;

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 50 

//    排序 
int cmp(const void* a, const void* b)

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


int main(void)

    srand( (unsigned)time(NULL) );
    int num[N];
    int tag[N*2] = 0;
    int i = 0;
    
    while( i < N )
        int x = rand()%90 + 10;
        //    判断该数是否取过了 
        if( !tag[x] )
            num[i++] = x;
            tag[x] = 1;    
            
    
    qsort(num, N, sizeof(int), cmp);
    
    while( i-- )
        printf("%d ", num[i]);
        if( i%10 == 0 )
            putchar('\\n');
    
    
    return 0;

参考技术B 建议使用桶排序的方法。大概说一下思路。初始化一个数组a, 随机一个数,将其放入对应下标的位置,如果该下标已有值,说明该值被生成过,则不再生成。这样生成50次,最后将数组a输出。 参考技术C 每次rand的时候 比较一下 如果是重复过的 就再rand 直到不是重复的为止。 参考技术D 不清楚 我是学法律的 第5个回答  2018-11-11 你得问你们老师

c_cpp 第三题


#include <bits/stdc++.h>
 
using namespace std;
 
class Point{
public:
    double x, y;
    Point(double a, double b): x(a), y(b) {}
    Point(const Point& p) {
        x = p.x;
        y = p.y;
    }
    void setx(int a) { x = a; }
    void sety(int b) { y = b; }
    double getx() { return x; }
    double gety() { return y; }
};
 
class Circle{
private:
    Point coord;
    double r;
public:
    Circle(Point p, double a): coord(p), r(a) {}
    int JudgeRelation(const Circle& another) {
        double d1 = r + another.r, d2 = fabs(r - another.r);
        double x1 = coord.x, y1 = coord.y;
        double x2 = another.coord.x, y2 = another.coord.y;
        if ( (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) > d1*d1 ) return 1;
        if ( (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) < d2*d2 ) return 2;
        if ( (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) == d1*d1 ) return 3;
        if ( (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) == d2*d2 ) return 4;
        if ( ((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) < d1*d1) && ((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) > d2*d2)) return 5;
 
    }
};

int main()
{
    int t, r, d, n;
    int x, y;
    cin >> t;
    while(t--) {
        cin >> r >> d;
        Point p(0,0);
        Circle c1(p,r);
        Circle c2(p,d);
        cin >> n;
        int cnt = 0;
        for(int i = 0; i < n; ++i) {
            cin >> x >> y >> r;
            Circle c3(Point(x,y),r);
            int flag1 = c1.JudgeRelation(c3);
            int flag2 = c2.JudgeRelation(c3);
            if((flag1 == 2 || flag1 == 4 ) && (flag2 == 1 || flag2 == 3)) cnt++;
        }
        cout << cnt << endl;
    }
    return 0;
}

以上是关于c语言数组,第三题的主要内容,如果未能解决你的问题,请参考以下文章

深入理解C指针经典笔试题——指针和数组

C语言指针进阶第三站,数组指针!

算法入门 01线性枚举(简单 - 第三题)LeetCode 876

C语言怎样利用数组处理数据?

c语言如何表示二维数组里面有#

纯C语言|简便方法|解题报告(第18例) ASCII码