| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 222 人关注过本帖
标题:输入4个数,按照程序输入输出,无编译错误,逻辑问题出错,要是能帮忙指出程 ...
只看楼主 加入收藏
加冕
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-11-24
结帖率:57.14%
  已结贴   问题点数:20  回复次数:7   
输入4个数,按照程序输入输出,无编译错误,逻辑问题出错,要是能帮忙指出程序需要改进的地方就更好了
#include<stdio.h>
/*要求:定义函数encrypt加密,定义函数decrypt解密

输入多组四位数,将其加密或解密后输出。如果输入正数代表加密,负数代表解密

加密方法是将该数每一位上的数字加8,然后除以10取余,作为该位上的新数字,最后将千位和百位上的数字互换,十位和个位上的数字互换,组成加密后的新四位数。

解密方法,按照上述加密过程逆向解密将其输出*/
//举例 输入
//      1345
//      -1932
//输出    1932
//       1345
extern X;
 void encrypt(int X)
{
 int i,j,k,m;
   X=X+8888;
   i=X%10;  X=X/10;
   j=X%10; X=X/10;
   k=X%10; X=X/10;
   m=X;
   X=k*1000+m*100+i*10+j;
  
}
  void decrypt(int X)
{
 int i,j,k,m;
 i=X%10;  X=X/10;
   j=X%10; X=X/10;
   k=X%10; X=X/10;
   m=X;
   X=10000+m*1000+k*100+j*10+i;

   X=X-8888;
}

main()
{
   int X;
 
 while(scanf("%d",&X)!=EOF)
 {
    if(X<0)
 {decrypt(X);
 printf("Decrypt is %d",X);
 }  
 else
 {encrypt(X);
 printf("Encrypted is %d",X);}
 }
}
2018-12-06 19:56
龙侠2018
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2018-12-6
  得分:7 
你好,加密、解密过程你都没考虑千位进位吧,容易窜位
2018-12-06 20:20
加冕
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-11-24
  得分:0 
回复 2楼 龙侠2018
数学不好,不是特别懂,可以进一步说明吗?
在解密的时候我进行了1E5,可能会有问题。我不太懂如何对加密过程反过来经行运算怎么办?主要是解密8888这个位置如何处理怎么考虑我不太懂,怎么分当加8888向前进一位,还有就是在千分位不变。

授人以鱼不如授人以渔请说一下用什么方法和需要学习什么来解决问题,谢谢大家
2018-12-07 20:59
莱布尼茨
Rank: 2
等 级:论坛游民
帖 子:7
专家分:19
注 册:2018-3-8
  得分:7 
程序代码:
#include<stdio.h>
//extern我这报错 ,也可以用指针 ,或者直接用加密、解密函数里打印

 void encrypt(int X)
{
 int i1,j1,k1,m1,i2,j2,k2,m2;
 //你的方法我看不懂。。不知道这8888哪里冒出来的,尽量跟着题目走

 
//这是另一种求位方法。

   i1=X/1000;//个千

   j1=(X-i1*1000)/100;//

   k1=(X-i1*1000-j1*100)/10;//

   m1=X%10;//

//下面求新的i,j,k,m 。
//先将千位和百位上的数字互换,十位和个位上的数字互换
//不影响结果
    i2=(j1+8)%10;j2=(i1+8)%10;
    k2=(m1+8)%10;m2=(k1+8)%10;
    X=i2*1000+j2*100+k2*10+m2;
    printf("X=%d",X);
 

}
  void decrypt(int X)
{

   int i1,j1,k1,m1,i2,j2,k2,m2;
   X=-X;//去掉 - 号,因为它仅仅代表解密

   i1=X/1000;
   j1=(X-i1*1000)/100;

   k1=(X-i1*1000-j1*100)/10;
   m1=X%10;
//假设这个X在加密前的位分别是i2,j2,k2,m2.
//加密后的位就是decrypt中求的i1,j1,k1,m1。
// 经过分析(这里不懂再问我)

//当j2=0,i1=(j2+8)%10=8。
//当j2=1,i1=(j2+8)%10=9。
//当j2=2时,i1=(j2+8)%10=0。
//当j2=3~9时,i1=(j2+8)%10=1~7。
    if(i1==8) j2=0;
    else if(i1==9) j2=1;
    else if(i1==0) j2=2;
    else j2=i1+1*10-8;//当j2=3~9时,j2+8的十位数就是1。所以j2+8=1*10+i1,j2=i1+1*10-8。

   
//同理再把其他三位求出来。

    if(j1==8) i2=0;
    else if(j1==9) i2=1;
    else if(j1==0) i2=2;
    else i2=j1+1*10-8;
   

    if(k1==8) m2=0;
    else if(k1==9) m2=1;
    else if(k1==0) m2=2;
    else m2=k1+1*10-8;
   

    if(m1==8) k2=0;
    else if(m1==9) k2=1;
    else if(m1==0) k2=2;
    else k2=m1+1*10-8;
   

    X=i2*1000+j2*100+k2*10+m2;
    printf("X=%d",X);
   

}

int main ()
{
    int X;

 while(scanf("%d",&X)!=EOF)
 {
    if(X<0)
 {decrypt(X);


 }

 else
 {encrypt(X);
 }
 }
}

解密的有点复杂了,有什么不懂的可以问我,如果有什么简化的答案望告知。
附件: 您没有浏览附件的权限,请 登录注册
2018-12-08 23:36
龙侠2018
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2018-12-6
  得分:0 
回复 3楼 加冕
你的方法加密:前面跟你的代码一样;
                m=X%10;X=X/10;
              int h=X;
            加密后的数 X=10000*h+1000*k+100*m+10*i+j;  千位和百位互换  十位 个位互换。
               if(X>=10000)
                    X=X-10000;
               

解密:前面跟你的代码一样;
    m=X%10;X=X/10;
   
        if(k<9){
        
        X=10000+1000*k+100*m+10*i+j-8888;
        }else{
        X=1000*k+100*m+10*i+j-8888;
        }
你看这个对不?
 


[此贴子已经被作者于2018-12-11 14:26编辑过]

6 天前 14:01
龙侠2018
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2018-12-6
  得分:0 
回复 4楼 莱布尼茨


[此贴子已经被作者于2018-12-11 14:27编辑过]

6 天前 14:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:273
帖 子:6001
专家分:34326
注 册:2011-1-18
  得分:7 
程序代码:
#include <stdio.h>

unsigned encrypt( unsigned n )
{
    return (n/10%10+8)%10*1 + (n/1%10+8)%10*10 + (n/1000%10+8)%10*100 + (n/100%10+8)%10*1000;
}

unsigned decrypt( unsigned n )
{
    return (n/10%10+2)%10*1 + (n/1%10+2)%10*10 + (n/1000%10+2)%10*100 + (n/100%10+2)%10*1000;
}

int main( void )
{
    for( int n; scanf("%d",&n)==1; )
        printf( "%u\n", n<0?decrypt(-n):encrypt(n) );
}
6 天前 14:14
龙侠2018
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2018-12-6
  得分:0 
回复 7楼 rjsp
不愧是版主啊,你这个算法简单!
5 天前 21:09







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

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