| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4841 人关注过本帖, 1 人收藏
标题:求教4道经典问题的代码
只看楼主 加入收藏
xj8523
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-4-11
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:17 
求教4道经典问题的代码
一、    产生10个随机的小写字母,将这些字母进行输出,用户可以更换其中的某个字母。具体要求如下:
a)    要求系统初次产生的10随机字母不能重复
b)    用户要求更换的原字母如果不存在则给出相应提示
c)    用户要求更换的新字母如果已经存在也给出相应提示
d)    如果用户输入0(零)程序就结束
运行效果如下:
 
图片附件: 游客没有浏览图片的权限,请 登录注册


二、    题目如下: 用1,2,3,4这4个数字,打印出所有不同的排列,如:1234,1324等,要求:“4”不能排第3位,“1”与“4”不能相连。
图片附件: 游客没有浏览图片的权限,请 登录注册

 

三、    请用户输入一个字符串,把字符串左边的若干个字符移动到字符串的尾部。比如:用户输入的字符串是:abcdef,如果移动的字符个数是:2位,那么得到字符串将是cdefab。具体要求如下:
a)    移动的字符个数不是固定2位,可以由用户输入。
b)    如果用户输入的字符个数大于或等于主字符串的长度,则要提示“必须小于字符串的长度”。
c)    长度输入错误后请用户继续输入长度。
效果图如下:
 
图片附件: 游客没有浏览图片的权限,请 登录注册

四、    请输入一段字符串,将重复的字符去除掉。将去除重复之后的新字符串进行输出。效果如下:
 
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 字母 用户 经典 
2016-04-11 15:59
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:7 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main()
{
    int a[10];
    int i, j;
    char in, st;
    srand((unsigned)time(NULL));
    for (i = 0; i < 10; i++)
    {
        a[i] = rand()%26;
        for (j = 0; j < i; j++)
        {
            if (a[i] == a[j])
            {
                a[i] = rand() % 26;
                j = -1;
                continue;
            }
        }
    }
    printf("系统生成的的字母如下:\n");
    for (i = 0; i < 10; i++)
    {
        printf("%c ", a[i] + 'a');
    }
    printf("\n");

    while(1)
    {
        printf("请输入你要替换的原字母和新字母,用空格隔开,输入0表示结束:\n");
        scanf(" %c",&in);
        if (in == '0')
        {
            printf("程序结束:\n");
            break;
        }
        scanf(" %c",&st);
        if ((st >= 'z') && (st <= 'a'))
        {
            printf("你输入的不是小写字母!\n");
            continue;
        }
        if ((in <= 'z') && (in >= 'a'))
        {
            for (i = 0; i < 10; i++)
            {
                if (in == a[i] + 'a')
                {
                    break;
                }
            }
            if (i == 10)
            {
                printf("你输入的字母不存在!\n");
                continue;
            }
            else
            {
                for (j = 0; j < 10; j++)
                {
                    if (st == a[j] + 'a')
                    {
                        printf("你要替换的字母已存在!\n");
                        break;
                    }
                }
                if (j < 10)
                {
                    ;
                }
                else
                {
                    a[i] = st - 'a';
                    printf("替换成功,更新后的字母如下:\n");
                    for (i = 0; i < 10; i++)
                    {
                        printf("%c ", a[i] + 'a');
                    }
                    printf("\n");
                }
            }
        }        
        else
        {
            printf("你输入的不是小写字母!\n");
        }
    }
}
2016-04-11 16:46
xj8523
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-4-11
收藏
得分:0 
回复 2楼 grmmylbs
兄弟,太厉害了,我想了很久,还是做不出来
2016-04-11 17:07
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int a,b,c,d;
    int i, j,count = 0;
    for (i = 1234; i <= 4321; i++)
    {
        a = i % 10;
        b = i / 10 % 10;
        c = i / 100 % 10;
        d = i / 1000;
        if ((a != b)&&(a != c) &&(a != d) && (b != c) && (b != d) && (c != d) && (a > 0) && (a < 5) && (b > 0) && (b < 5) && (c > 0) && (c < 5) && (d > 0) && (d < 5))
        {
            if ((b != 4)&&(abs(a - b) != 3)&&(abs(b - c) != 3)&&(abs(c - d) != 3))
            {
                printf("%d\n", i);
                count++;
            }
        }
    }
    printf("排列的方式有 = %d种\n", count);
    
}


[此贴子已经被作者于2016-4-11 17:10编辑过]

2016-04-11 17:09
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int main()
{
    char a[N], b[N], c[N];
    unsigned int count;

    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(c, 0, sizeof(c));
    printf("请输入一个字符串:");
    scanf("%s", a);
    printf("%s\n", a);
    while (1)
    {
        printf("请输入要移动的字符个数:");
        scanf("%d", &count);
        printf("%d\n", count);
        if (count >= strlen(a))
        {
            printf("必须小于字符串的长度!\n");
            continue;
        }
        strncpy(b,a, count);
        strncpy(c, a + count, strlen(a) - count);
        strcat(c, b);
        printf("移动后:%s\n",c);
        break;
    }
}
2016-04-11 17:28
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int main()
{
    char a[N], b[N], c[N];
    int i,j,count = 1;

    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(c, 0, sizeof(c));
    printf("请输入一个字符串:");
    scanf("%s", a);
    printf("%s\n", a);
    b[0] = a[0];
    for (i = 1; i <= strlen(a); i++)
    {
        for (j = 0; j < i; j++)
        {
            if (a[j] == a[i])
            {
                break;
            }
        }
        if (j == i)
        {
            b[count] = a[i];
            count++;
        }
    }
    printf("出去重复后:%s\n",b);
}
2016-04-11 17:38
xj8523
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-4-11
收藏
得分:0 
回复 5楼 grmmylbs
2016-04-11 17:38
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:7 
回复 2楼 grmmylbs
生成10个不重复随机数
一般用洗牌算法
不要一边生成一边查重复
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM ('z'-'a'+1) 

int main()
{
    int arr[NUM];
    for(int i=0; i<NUM; ++i)
        arr[i] = 'a' + i;
   
    srand(time(NULL));
    for(int i=0; i<10; ++i)
    {
        int t = rand()%(NUM-i)+i;
        int tmp = arr[t];
        arr[t] = arr[i];
        arr[i] = tmp;
    }
   
    for(int i=0; i<10; ++i)
        printf("%c ", arr[i]);
       
    return 0;
}

这里 arr 前10个元素就是 不重复的随机数

https://zh.
2016-04-11 17:51
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
第四题
程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
    char str[100];
    scanf("%s", str);
   
    int nCount[127] = { 0 };
    //记录字符串中每个字符出现的次数
    for(int i=0; str[i]; ++i)
        ++nCount[str[i]];
       
    int nlen = 0;
    for(int i=0; str[i]; ++i)
    {
        //如果这个字符出现过1次 nlen就加一 没出现或者已经出现过1次 nlen就不变 
        if(nCount[str[i]])
        {
            nCount[str[i]] = 0;
            str[nlen++] = str[i];
        }
    }
    //处理字符串尾部的0
    str[nlen] = 0;
    //输出结果
    puts(str);
    return 0;
}


https://zh.
2016-04-11 18:08
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 5楼 grmmylbs
memset是多余的 你这里并不需要对数组进行初始化
而且 就算的确要初始化
直接 char arr[100] = ""; 比较合理

https://zh.
2016-04-11 18:09
快速回复:求教4道经典问题的代码
数据加载中...
 
   



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

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