| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1214 人关注过本帖
标题:各位高手帮分析分析,这一问题我搞了两天也弄不出来
只看楼主 加入收藏
呵呵呵。。
Rank: 2
等 级:论坛游民
帖 子:43
专家分:52
注 册:2010-6-11
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:18 
各位高手帮分析分析,这一问题我搞了两天也弄不出来
编一程序,输入12345,输出:
12345
51234
45123
34512
23451
12345
2010-07-15 22:50
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[128];
    char tmp;
    int str_len;

    scanf("%s",str);
    str_len = strlen(str);

    for(int j=0;j < str_len;j++)
    {
        tmp = str[str_len-1];
        for(int i=str_len-1;i > 0;i--)
            str[i] = str[i-1];
        str[0] = tmp;
        printf("%s\n",str);
    }

    return 0;
}
2010-07-15 23:13
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
收藏
得分:2 
不知道可不可以用位运算
2010-07-15 23:31
南国迦叶
Rank: 2
等 级:论坛游民
帖 子:46
专家分:20
注 册:2010-7-9
收藏
得分:2 
我感觉应该可以用楼上的朋友说的位运算的,但是不确定!
2010-07-16 11:48
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:2 
我给个参考:
 用5个for循环,在最后一个循环里判断: 当每个值都不相同的时候输出
   if(i!=j&&......)
   printf("%d%d%d%d%d\n",a[i],a[j],a[k],a[m],a[n]);用数组存放输入的数字 只限5个

   

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-16 12:00
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:2 
回复 5楼 do8do8do8
按照你的参考,我居然傻傻的编了个程序,在TC2.0上能通过,是正确的……
程序如下:
#include<stdio.h>
void main()
{
 int a[5],b[5];
 int loop1,loop2,loop3,loop4,loop5;
 printf("input the five numbers\n");
 scanf("%d,%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
 printf("your input is :\n");
 printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
 for(loop1=0;loop1<5;loop1++)
 { b[0]=a[loop1];
   for(loop2=0;loop2<5;loop2++)
   { b[1]=a[loop2];
     for(loop3=0;loop3<5;loop3++)
     { b[2]=a[loop3];
       for(loop4=0;loop4<5;loop4++)
       { b[3]=a[loop4];
     for(loop5=0;loop5<5;loop5++)
     { b[4]=a[loop5];
       if(b[0]!=b[1]&&b[0]!=b[2]&&b[0]!=b[3]&&b[0]!=b[4]&&b[1]!=b[2]&&b[1]!=b[3]&&b[1]!=b[4]&&b[2]!=b[3]&&b[2]!=b[4]&&b[3]!=b[4])
       printf("%d%d%d%d%d\n",b[0],b[1],b[2],b[3],b[4]);
     }
       }
     }
   }
 }
}
不过,输出的结果似乎太那个了……
后来我才发现……只要5个数不一样就输出……于是……

我很懒,但我讨厌别人说我懒……
2010-07-16 13:08
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
回复 6楼 vs_inzaghi
有劳有劳 辛苦辛苦
又有个参考 这个下直接贴码了
#include <stdio.h>

int main(void)
{
   int a[5];
   int i,j=0,flag;
   scanf("%d,%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
      printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
   while(j<5)
     {    flag=a[4];
        for(i=4;i>0;i--)

             a[i]=a[i-1];
          a[0]=flag;
        printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
        j++;

     }
        getch();
    return 0;
   }

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-16 13:37
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:2 
2楼的多好

不过交换元素可能会影响速度
这是我的代码
程序代码:
#include <stdio.h>
#include <string.h>

int len;

void print(char *input,int start){
    int i;
    for(i=0;i<len;i++)
        putchar(input[add_index(start,i)]);
    printf("\n");
}

int add_index(int start,int step){
    if(start+step<=len-1) return start+step;
    else if(start+step>len-1) return start+step-len;
}

int main(){

    char input[100] = "";
    int j;
   
    gets(input);
    len = strlen(input);
   
    //print the original input
    puts(input);
    //print in reverse order
    for(j=len-1;j>=0;j--)
        print(input,j);

    return 0;
}

2010-07-16 14:14
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
LS的方法很不错。。。。我也再来个效率高点的。。。。
程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[128];
    char *str_p;
    char tmp;
    int str_len;

    scanf("%s",str);
    str_len = strlen(str);
    str_p = str+str_len-1;

    for(int j=0;j < str_len;j++)
    {
        tmp = *str_p;
        printf("%s",str_p);
        *str_p = '\0';
        printf("%s\n",str);
        *str_p = tmp;
        str_p--;
    }

    return 0;
}
2010-07-16 15:15
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:2 
int arr[] = {1,2,3,4,5,1,2,3,4,5};
int *p = arr + 5;
while (p >= arr)
{
int *temp = p;
for (int i = 0; i != 5; ++i )
{
cout << *temp++;
}
cout << endl;
--p;
}

迭代的是人,递归的是神。
2010-07-16 15:43
快速回复:各位高手帮分析分析,这一问题我搞了两天也弄不出来
数据加载中...
 
   



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

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