小学数学题用c写,考验你的智商

AC522066863 2013-01-04 03:07:59
我的目的是使用1到8八个自然数,组两个四位数 其中一个是另外一个的4倍,而且每个四位数的每一位不能一样,源代码如下:
#include<stdio.h>
void main()
{ int i,j;
for(i=1234;i<=8765;i++)
for(j=1234;j<=8765;j++)
{
i%10!=i/1000!=(i%1000)/100!=((i%1000)/10)%10;
j%10!=j/1000!=(j%1000)/100!=((j%1000)/10)%10;
if(i/j==4)
printf("i=%d,j=%d\n",i,j);
}

}
最后程序老师在不停的循环啥的 不知道问题在哪里?两个数我分别设为i和j,他们最小都是1234,最大都是8765....求大神给下帮忙
...全文
2499 59 打赏 收藏 转发到动态 举报
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
Intel0011 2013-03-20
  • 打赏
  • 举报
回复
/*43楼的方法很不错,值得学习*/ /*这里改进一点点*/ #include <stdio.h> #include <string.h> int check(int n1, int n2); int main(void) { int n1, n2; //int k = 0; char str1[5] = { '\0' }; char str2[5] = { '\0' }; for (n1 = 1234; n1 <= 2187; ++n1) { n2 = n1 << 2; sprintf(str1, "%d", n1); sprintf(str2, "%d", n2); if (strchr(str1, '0') || strchr(str1, '9')) continue; if (strchr(str2, '0') || strchr(str2, '9')) continue; if (check(n1, n2)) { printf("%d = %d * 4\n", n2, n1); } //++k; } //printf("%d\n", k); return 0; } int check(int n1, int n2) { int i, res; res = 0; for (i = 0; i < 4; ++i) { res |= (1 << (n1 % 10 - 1)); n1 /= 10; } for (i = 0; i < 4; ++i) { res |= (1 << (n2 % 10 - 1)); n2 /= 10; } return res == 0xFF; }
Aulilino 2013-03-18
  • 打赏
  • 举报
回复
「已注销」 2013-03-16
  • 打赏
  • 举报
回复
我承认,我连小学的智商都没有达到。 下次直接进入学前班。
孤独小剑 2013-03-08
  • 打赏
  • 举报
回复
引用 54 楼 myjerry 的回复:
引用 44 楼 gdujian0119 的回复:引用 42 楼 myjerry 的回复:刚刚上面的代码有点修改,现在重新附上来: C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585……
大胆猜测:楼主原句“而且每个四位数的每一位不能一样……他们最小都是1234,最大都是8765”这里可能楼主开始表达有些歧义,因为大家以前都做过这种数字游戏所以按现在理解是自然了。
赵4老师 2013-03-07
  • 打赏
  • 举报
回复
提问的智慧
myjerry 2013-03-07
  • 打赏
  • 举报
回复
引用 44 楼 gdujian0119 的回复:
引用 42 楼 myjerry 的回复:刚刚上面的代码有点修改,现在重新附上来: C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#incl……
楼主的意思表达含糊。 我的理解是每个四位数的每一位不能一样,两个数字之间,可以有相同数字。 并不是说循环多就效率低。关键是循环的次数。
jiewinli 2013-01-14
  • 打赏
  • 举报
回复
代码风格,各有千秋!!
永远的霸者 2013-01-14
  • 打赏
  • 举报
回复
#include <stdio.h> #include <stdlib.h> void storeDigit(int i, int *aNum) { int nQuotient = i; int nRemainder = 0; for (int loop = 0; loop < 4; loop++) { nRemainder = nQuotient % 10; nQuotient = nQuotient / 10; aNum[loop] = nRemainder; if (nQuotient == 0) break; } } int cmp(int *aNum, int* bNum) { for (int i = 0; i < 4; i++) { if ((aNum[i] < 1) || (aNum[i] > 8) || (bNum[i] < 1) || (bNum[i] > 8)) { return 0; } for (int j = 0; j < 4; j++) { if ((i != j) && (aNum[i] == aNum[j])) return 0; if ((i != j) && (bNum[i] == bNum[j])) return 0; if (aNum[i] == bNum[j]) return 0; } } return 1; } void main() { int i, j = 0; int aNum[4] = { 0 }; int bNum[4] = { 0 }; int nRet = 0; for (i = 1234; i <= (8765 / 4); i++) { j = i * 4; storeDigit(i, aNum); storeDigit(j, bNum); nRet = cmp(aNum, bNum); if (nRet == 1) { printf("%d * 4 = %d\n", i, j); } } system("pause"); }
xuguosheng19900920 2013-01-11
  • 打赏
  • 举报
回复
智商拙计啊。。这么多大神,真是犀利啊。
紫云的博客 2013-01-10
  • 打赏
  • 举报
回复
Anthony_yt 2013-01-10
  • 打赏
  • 举报
回复
引用 19 楼 zhouchichi203 的回复:
“考验你的智商” “求大神给下帮忙” 我不是大神,也没兴趣被人考验智商
+10010
卖萌de猫 2013-01-09
  • 打赏
  • 举报
回复

#include <stdio.h>
#define LENGTH 8
#define MIN 1234
#define MAX 8765
int main()
{
	int flag;
	int flag2;
	int index,index2;
	int arr[LENGTH];
	int a,b;
	for(a=MIN;a<=MAX/4;++a)
	{
		flag=1;
		arr[3]=a%10;
		arr[2]=(a/10)%10;
		arr[1]=(a/100)%10;
		arr[0]=(a/1000)%10;
		b=a*4;
		arr[7]=b%10;
		arr[6]=(b/10)%10;
		arr[5]=(b/100)%10;
		arr[4]=(b/1000)%10;
		for(index=1;index<=8;++index)
		{
			flag2=0;
			for(index2=0;index2!=LENGTH;++index2)
			{
				if(arr[index2]==index)//find the nunber
				{
					flag2=1;
					break;
				}
			}
			if(flag2==0)//not found finally
			{
				flag=0;
				break;
			}
		}//loop for validating every bit
		if(flag==1)
		{
			printf("%d*4=%d\n",a,b);
		}
	}//loop for every number
	return 0;
}
成功毕业
赵4老师 2013-01-09
  • 打赏
  • 举报
回复
提醒:计算机最擅长的事就是快速循环计算。 人绞尽脑汁让计算机少循环再多次,计算机永远不会领你这个人情的。
天涯洪七公 2013-01-09
  • 打赏
  • 举报
回复
先求出那两个数,然后把数字有重复的踢出不久行了么,就分2步啊……
爱上寂寞 2013-01-08
  • 打赏
  • 举报
回复
	int a[] = {1,2,3,4,5,6,7,8};
	do{
		int num1 = a[0]*1000+a[1]*100+a[2]*10+a[3];
		int num2 = a[4]*1000+a[5]*100+a[6]*10+a[7];
		if (num1 == num2 * 4)
			cout<<num1<<"=4*"<<num2<<endl;
	}while (next_permutation(a, a+8));
++
SNAKE-SNAKE 2013-01-06
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
单步调试和设断点调试是程序员必须掌握的技能之一。
+1
孤独小剑 2013-01-06
  • 打赏
  • 举报
回复
引用 42 楼 myjerry 的回复:
刚刚上面的代码有点修改,现在重新附上来: C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include "stdafx.h"#inclu……
答案只有两对值 i: 1368, j= 5472 ... i: 1863, j= 7452 ... 效率那么多循环……
sj3762437 2013-01-06
  • 打赏
  • 举报
回复
#include <stdio.h>

int check(int n1, int n2);

int main(void)
{
    int n1, n2;

    for (n1 = 1234; n1 <= 2187; ++n1) {
        n2 = n1 << 2;
        if (check(n1, n2)) {
            printf("%d = %d * 4\n", n2, n1);
        }
    }

    return 0;
}

int check(int n1, int n2)
{
    int i, res;

    res = 0;
    for (i = 0; i < 4; ++i) {
        res |= (1 << (n1%10 - 1));
        n1 /= 10;
    }
    for (i = 0; i < 4; ++i) {
        res |= (1 << (n2%10 - 1));
        n2 /= 10;
    }

    return res == 0xFF;
}
运行结果: 5472 = 1368 * 4 7452 = 1863 * 4
myjerry 2013-01-06
  • 打赏
  • 举报
回复
刚刚上面的代码有点修改,现在重新附上来:

#include "stdafx.h"
#include <Windows.h>
#include<iostream>
using namespace std;


int genNum(int  bit1, int bit2, int bit3, int bit4)
{
    return  (bit1*1000 + bit2*100 + bit3*10 + bit4);
}

bool isNumValid(int num)
{
    if (num > 8765)
        return  false;

    BYTE    bits[4];
    char    str[5]  = "";
    sprintf(str, "%d", num);
    for(int i=0; i<4; i++) {
        bits[i] = str[i] - '0';
        if (bits[i] == 0 || bits[i] == 9)
            return  false;
    }

    for(int i=0; i<3; i++) {
        for(int j=i+1; j<4; j++) {
            if (bits[i] == bits[j])
                return  false;
        }
    }
    return  true;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int a, b;
    int a_bit1, a_bit2, a_bit3, a_bit4;
    int b_bit1, b_bit2, b_bit3, b_bit4;

    char    strOut[50] = "";
    
    for(a_bit1=1; a_bit1<=8; a_bit1++) {
        for(a_bit2=1; a_bit2<=8; a_bit2++) {
            if (a_bit2 == a_bit1)
                continue;
            for(a_bit3=1; a_bit3<=8; a_bit3++) {
                if (a_bit3 == a_bit2 || a_bit3 == a_bit1)
                    continue;
                for(a_bit4=1; a_bit4<=8; a_bit4++) {
                    if (a_bit4 == a_bit3 || a_bit4 == a_bit2 || a_bit4 == a_bit1)
                        continue;
                    // 至此,生成了各位数字各不相同的数字a
                    a   = genNum(a_bit1, a_bit2, a_bit3, a_bit4);
                    b   = a << 2;
                    if (isNumValid(b)) {
                        cout<<"a="<<a<<",\tb="<<b<<endl;
                        sprintf(strOut, "a=%d,\tb=%d\n", a, b);
                        OutputDebugStringA(strOut);
                    }
                }
            }
        }
    }

    cout<<"完毕!"<<endl;
	return 0;
}
运行结果:

a=1283,	b=5132
a=1284,	b=5136
a=1287,	b=5148
a=1328,	b=5312
a=1342,	b=5368
a=1346,	b=5384
a=1354,	b=5416
a=1357,	b=5428
a=1358,	b=5432
a=1367,	b=5468
a=1368,	b=5472
a=1428,	b=5712
a=1432,	b=5728
a=1437,	b=5748
a=1453,	b=5812
a=1456,	b=5824
a=1458,	b=5832
a=1468,	b=5872
a=1532,	b=6128
a=1537,	b=6148
a=1538,	b=6152
a=1543,	b=6172
a=1546,	b=6184
a=1562,	b=6248
a=1578,	b=6312
a=1582,	b=6328
a=1587,	b=6348
a=1628,	b=6512
a=1632,	b=6528
a=1637,	b=6548
a=1643,	b=6572
a=1678,	b=6712
a=1682,	b=6728
a=1683,	b=6732
a=1687,	b=6748
a=1782,	b=7128
a=1783,	b=7132
a=1784,	b=7136
a=1832,	b=7328
a=1837,	b=7348
a=1842,	b=7368
a=1846,	b=7384
a=1853,	b=7412
a=1854,	b=7416
a=1857,	b=7428
a=1863,	b=7452
a=1864,	b=7456
a=1867,	b=7468
a=2134,	b=8536
a=2143,	b=8572
a=2153,	b=8612
a=2156,	b=8624
a=2158,	b=8632
a=2163,	b=8652
a=2168,	b=8672
a=2178,	b=8712
a=2183,	b=8732
a=2184,	b=8736
bookc-man 2013-01-06
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
单步调试和设断点调试是程序员必须掌握的技能之一。
++
加载更多回复(39)

70,006

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧