| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1729 人关注过本帖
标题:指针问题,写了一会错了求解答
只看楼主 加入收藏
清风莫言
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-2
结帖率:0
收藏
 问题点数:0 回复次数:4 
指针问题,写了一会错了求解答
. 使用指针编程实现输入n个整数,统计不同数字的个数。
输入示范
Input n:10
Input nums:20 15 30 20 15 30 78 78 56 92
输出示范
6
搜索更多相关主题的帖子: 统计 
2016-06-03 00:43
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>
main()
{
    int n;
    printf("Input n: "); scanf("%d", &n);
    int num[n];
    for (int i=0; i<n; i++)
    {
        printf("Input num%d: ", i+1);
        scanf("%d", &num[i]);
    }
    int *pn=num+1, *pi=num+1, *pj;
    for (int i=1; i<n; i++, pi++)
    {
        for (pj=num; pj<pn; pj++)
            if (*pi == *pj) break;
        if (pj == pn) *pn++ = *pi;
    }
    printf("\n不同的数: ");
    for (pi=num; pi<pn; pi++) printf("%d ", *pi);
    printf("\n不同的数个数: %d ", pn-num);
}
2016-06-03 08:26
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
用指针就得用链表,很麻烦的。
程序代码:
#include <stdio.h>

int main()
{
    int a[10]={20,15,30,20,15,30,78,78,56,92};
    int i,j,k=1,tmp;

    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
        {
            if(a[i]>a[j])
            {
                tmp=a[i];
                a[i]=a[j];
                a[j]=tmp;
            }
        }
    }

    for(i=1;i<10;++i)
    {
        k++;
        if(a[i]==a[i-1])  k--;
    }

    printf("%d\n",k);
    return 0;
}

   唯实惟新 至诚致志
2016-06-03 08:31
shine4444
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-13
收藏
得分:0 
用了个笨方法
程序代码:
#include<stdio.h>
#include<malloc.h>
void main()
{
    int i,j,n,*pt,*pt1;
    while(1)
    {
        printf("Input n:");
        scanf("%d",&n);
        pt1=(int *)malloc(n*sizeof(int));
        pt=pt1;
        printf("Input %d nums:",n);
        for(i=0;i<n;i++)
            scanf("%d",pt1++);
        pt1=pt;//pt1指针复位
        for(i=0;i<n;i++)
            printf("%6d",*pt1++);
        pt1=pt;//pt1指针复位
        printf("\n");
        if(n==1) 
            printf("1");
        else
        {
            //时间有限,未完成,按楼上大神类似的先排序再计算不同的个数
        }
        free(pt);
    }
}
2017-01-06 00:09
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
以下是引用qq1023569223在2016-6-3 08:31:27的发言:

用指针就得用链表,很麻烦的。


我来个链表版的~~~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(Node)
typedef struct Node
{
    int num;
    struct Node *next;
    struct Node *back;
}Node;
Node *head=NULL;
int n=0;
void insert(Node *p1,Node *p2)
{
    if (p1==head)
    {
        p2->next=head;
        p2->back=NULL;
        head->back=p2;
        head=p2;

        return;
    }

    p2->back=p1->back;
    p1->back->next=p2;
    p2->next=p1;
    p1->back=p2;

    return;
}

void fun(int a)
{
    Node *p=head;
    Node *p2=NULL;

    if (head==NULL)
    {
        p=head=(Node *)malloc(LEN);
        head->next=NULL;
        head->back=NULL;
        head->num=a;
        n++;
        return ;
    }

    while (p->num>a&&p->next)
        p=p->next;

    if (p->num==a)
        return ;

    n++;

    p2=(Node *)malloc(LEN);

    p2->num=a;

    if (p->num>a)
    {
        p->next=p2;
        p2->back=p;
        p2->next=NULL;
        return ;
    }

    insert(p,p2);
}

int main()
{
    long int a[]={11111111,22222222,33333333,33333333,44444444,11111111,22222222};

    int *p=a;

    for (;p-a<sizeof(a)/sizeof(int);++p)
        fun(*p);

    printf("共有%d个不重复的数字\n",n);

    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-06 10:48
快速回复:指针问题,写了一会错了求解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018620 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved