| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2058 人关注过本帖
标题:编程错在哪,自己电脑上自己测试正确 ,提交显示只对一个案例
只看楼主 加入收藏
蒟蒻
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2019-11-11
结帖率:71.43%
收藏
已结贴  问题点数:18 回复次数:8 
编程错在哪,自己电脑上自己测试正确 ,提交显示只对一个案例

随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。

并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。
任务

林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。

应当按照以下的规则来判断密码是否安全:

    如果密码长度小于 6 位,则不安全

    如果组成密码的字符只有一类,则不安全

    如果组成密码的字符有两类,则为中度安全

    如果组成密码的字符有三类或以上,则为安全

通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。


输入格式:

输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。


输出格式:

针对每一个密码判断并输出它是否安全。对于不安全的密码输出 "Not Safe",对于中度安全的密码输出 "Medium Safe",对于安全的密码输出 "Safe"


输入样例:

4
1234
abcdef
ABC123
1#c3Gh[回车]


输出样例:

Not Safe

Not Safe

Medium Safe

Safe[回车]






我的代码
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int n,i,k,i1,k2,sum,dm,xm,q=0,k1;
    char a[10][30];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",a[i]);
        scanf("\0");
    }
    for(i1=0;i1<n;i1++){
        k=0;
        sum=0;
        dm=0;
        xm=0;
        q=0;
        for(k1=0;k1<30;k1++){
            if(a[i1][k1]=='\0'){
                break;
            }
            else{
                k++;
                if(a[i1][k1]>='0'&&a[i1][k1]<='9'){
                    sum=1;
                }
                else if(a[i1][k1]>='A'&&a[i1][k1]<='Z'){
                    dm=1;
                }
                else if(a[i1][k1]>='a'&&a[i1][k1]<='z'){
                    xm=1;
                }
                else {
                    q=1;
                }
            }
        }
        if(k<6){
            printf("Not Safe\n");
        }
        else{
            if(sum+dm+xm+q==1){
                printf("Not Safe\n");
            }
            if(sum+dm+xm+q==2){
                printf("Medium Safe\n");
            }
            if(sum+dm+xm+q>=3){
                printf("Safe\n");
            }
        }
   
        
        
    }
    return 0;
}
搜索更多相关主题的帖子: 输出 安全 字符 密码 sum 
2019-11-14 20:12
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:6 
1、测试用例超过10个咋办?

2、据说scanf函数并不识别转义字符。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-11-14 20:42
蒟蒻
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2019-11-11
收藏
得分:0 
回复 2楼 forever74
是有一个示例可能多的情况,但还有一个显示结果错误

2019-11-14 21:06
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:6 
程序代码:
        char **a=NULL;

    scanf("%d",&n);

    a=(char**)calloc(n,sizeof(char*));
    for(i=0;i<n;i++)
        a[i]=(char*)calloc(1,sizeof(char)*30);

    for(i=0;i<n;i++)
        scanf("%s",a[i]);

前面根据n的值动态分配a的空间,可以解决超过10个的问题。
注意程序结尾处不要忘记释放分配的动态内存,否则会造成内存泄漏的。
for (i = 0; i < n; ++i)
        free(a[i]);
free(a);

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-14 21:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:6 
只是将你的代码整理了一下,其它没做什么

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%d", &n );

    while( n-- )
    {
        char s[20];
        scanf( "%s", s );

        size_t len = 0;
        unsigned a=0,b=0,c=0,d=0; // 数字、大写字母、小写字母和其它符号
        for( char* p=s; *p; ++p )
        {
            ++len;
            if( *p>='0' && *p<='9' )
                a = 1;
            else if( *p>='A' && *p<='Z' )
                b = 1;
            else if( *p>='a' && *p<='z' )
                c = 1;
            else
                d = 1;
        }

        if( len < 6 )
            puts( "Not Safe" );
        else if( a+b+c+d == 1 )
            puts( "Not Safe" );
        else if( a+b+c+d == 2 )
            puts( "Medium Safe" );
        else
            puts( "Safe" );
    }

    return 0;
}

2019-11-15 09:44
蒟蒻
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2019-11-11
收藏
得分:0 
回复 5楼 rjsp
这与我的有什么区别?看不出来

2019-11-15 20:18
蒟蒻
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2019-11-11
收藏
得分:0 
回复 5楼 rjsp
这与我的有什么区别?水平低看不出来,还是有不过的示例
2019-11-15 20:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 7楼 蒟蒻
看不出来没办法
有不过的示例的话,我怀疑题目允许密码中存在空白字符,比如空格等等
2019-11-15 20:24
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
r版主这样写的循环,是对付OJ的正确示例,不会受限于用例个数。
另外我喜欢指出问题而不写代码是因为在条件不充分时写的代码几乎一定会有新的问题出现。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-11-15 23:03
快速回复:编程错在哪,自己电脑上自己测试正确 ,提交显示只对一个案例
数据加载中...
 
   



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

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