Anonymous 发表于 2023-2-17 17:11:44

做个复杂的东西

语言:最好是c语言
要求
1.三则加减运算是他的核心如1+1+2=4 或1+1-1=1 符号不能固定,数字随机
2.前三个数不大于10 结果不能大于20小于0
3无条件循环100个,不能重复
4.询问是否导出,导出放桌面
5.输入答案就显示答案
可以不必全完成
但1.2.3必需完成

ExiaGN001 发表于 2023-2-17 17:11:45

本帖最后由 ExiaGN001 于 2023-2-19 11:10 编辑

我就说下思路。
1.符号用随机数生成,1代表+,0代表-
随机数初始化 srand(time(NULL))调用rand()

2./3.
对于第i次生成,做以下操作:
通过rand()%10得到三个参数的值
通过rand()&1得到两个运算符
根据三个参数和运算符计算表达式,看结果是否满足条件
如果不满足条件,直接continue,i不变
否则遍历答案数组前i-1个个元素,检查是否重复(答案数组是100*6的二维数组,6个位置分别是3个参数,两个运算符和一个(正确的)计算结果)
如果有重复,直接continue,i不变
不然i自增1,将这回的结果计入答案数组

4.
如果导出,首先获取用户名(这个要用到winapi部分的函数)
然后用用户名按照这个格式生成桌面路径(仅限Windows)
C:\Users\[用户名]\Desktop
斜杠不分正反,字母不区分大小写

//如果程序就在桌面不用生成桌面路径,直接fopen([文件名],"r");
利用fopen和fprintf输出上文的答案数组即可
记得fclose

5.预先把答案算出来,和输入值比较即可。

#include<bits/stdc++.h>
#include<windows.h>
#include<shlobj.h>
using namespace std;
int ans;//最后的结果
int tmp;//当前查看的结果
/*
ans 和tmp的存储格式
0                1                2                3                4                5
操作数1        运算符1        操作数2        运算符2 操作数3 结果
*/
int cnt=0;
const int maxnum=10,minnum=0;

inline int create_optr()//生成一个运算符
{
        return rand()%2;//0代表+ 1代表-
}

inline int create_num()//生成一个操作数
{
        return rand()%(maxnum-minnum)+minnum;//maxnum=10 minnum=0
}

string getDesktopPath()//获取桌面位置
{
    LPITEMIDLIST pidl;
    LPMALLOC pShellMalloc;
    char szDir;
    if (SUCCEEDED(SHGetMalloc(&pShellMalloc)))
    {
      if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl))) {
            // 如果成功返回true
            SHGetPathFromIDListA(pidl, szDir);
            pShellMalloc->Free(pidl);
      }
      pShellMalloc->Release();
    }

    return string(szDir);
}

int get_ans()//根据随机出来的操作数确定答案
{
        int tmpans=tmp;
        if(tmp)tmpans-=tmp;
        else tmpans+=tmp;
        if(tmp)tmpans-=tmp;
        else tmpans+=tmp;
        return tmpans;


}
bool check_dupi()//查重/查合法
{
        if(tmp<0||tmp>20)return 0;
        int issame;//is_same是关键字,所以没加下划线
        for(int i=0;i<cnt;i++)
        {
                issame=0;
                for(int j=0;j<6;j++)
                {
                        issame+=(ans==tmp);
                }
                if(issame==6)return 0;//只要有一个匹配就返回0
        }
        return 1;
}
void output()//向终端
{
        for(int i=0;i<100;i++)
        {
                printf("%d %c %d %c %d = %d\n",
                        ans,(ans?'-':'+'),
                        ans,(ans?'-':'+'),
                        ans,ans);
        }
}
bool output_desktop()//检查结果
{
        string pth=getDesktopPath();
        char path;//Windows系统路径长度上限260,开275足够
        for(int i=0;i<pth.size();i++)path=pth;
        path='\0';
        strcat(path,"\problem.txt");
        cout<<path<<"\n";
        FILE *fp=fopen(path,"w");
        for(int i=0;i<100;i++)
        {
                fprintf(fp,"%d %c %d %c %d = %d\n",
                        ans,(ans?'-':'+'),
                        ans,(ans?'-':'+'),
                        ans,ans);

        }
        fclose(fp);
        char code="start ";
        strcat(code,path);
        system(code);

}

int main()
{
        srand(time(NULL));
        while(cnt<100)
        {
                tmp=create_num();
                tmp=create_optr();
                tmp=create_num();
                tmp=create_optr();
                tmp=create_num();
                tmp=get_ans();
                if(check_dupi())
                {
                        for(int i=0;i<6;i++)
                        {
                                ans=tmp;
                        }
                        cnt++;
                }
        }
        //output();
        cout<<"是否导出(Y/N)?";
        char optr;
        cin>>optr;
        if(optr%32+64=='Y')
                output_desktop();
        else
                ;//啥都不干
       
        return 0;
}



Anonymous 发表于 2023-2-17 17:13:54

完成4.5的有其他东西
4.度盘不限速
5.编程类书籍合计(电子)
5一部随机阿里盘的电影

sfqxx 发表于 2023-2-17 18:48:15

呃……

歌者文明清理员 发表于 2023-2-17 19:45:47

3 做不到
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randbetween(int n, int m) {
    // n下限,m上限,n<=随机数<m
    return rand() % (n - m) + m;
}
int randnum() {
    return randbetween(0, 11)
}
int calc(int n1, int fh, int n2) {
    if (fh == 0) // 加法
      return n1 + n2;
    else // 减法
      return n1 - n2;
}
int main() {
    srand((unsigned)time(NULL));
    for (int i=0; i<100; i++) {
      int f1 = randbetween(0, 2) // 符号
      char s1, s2;
      if (f1 == 0) s1 = '+';
      else s1 = '-';
      if (f2 == 0) s2 = '+';
      else s2 = '-';
      int f2 = randbetween(0, 2) // 符号2
      int a = randnum();
      int b = randnum();
      int c = randnum();
      int c1 = calc(a, f1, b);
      int c2 = calc(c1, f2, c2);
      if (c2 < 21) && (c2 > -1)
            printf("%d %c %d %c %d = %d", a, s1, b, s2, c, c2);
    }
    return 0;
}

jhq999 发表于 2023-2-17 19:47:57

////抛砖引玉
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int a,b,c,sg,sum,d,ct=0,i,j;
    srand(time(0));
    for(i=0,ct=0;i<100;)
    {
      sum=-1;
      while(sum<0||20<=sum)
      {
            a=rand()%11;
            sg=rand()%3;
            b=(rand()%11)*(sg?1:-1);
            sg=rand()%3;
            c=(rand()%11)*(sg?1:-1);
            sum=a+b+c;
      }
      for(j=0;j<ct;j+=1)
      {
            if(a==a&&b==b&&c==c)break;
      }
      if(ct==j)
      {
            a=a,b=b,c=c,sum=a+b+c;
            ct+=1;
            i+=1;
      }
    }


    for(i=0;i<100;i+=1)printf("%d%s%d%s%d=%d\n",a,b<0?"-\b":"+",b,c<0?"-\b":"+",c,sum);
//    scanf("%d",&d);
//    if(d==sum)printf("yes");
//    else printf("no");
    return 0;
}

Anonymous 发表于 2023-2-17 22:11:40

歌者文明清理员 发表于 2023-2-17 19:45
3 做不到

运行不了,有点问题

Anonymous 发表于 2023-2-18 12:13:07

ExiaGN001 发表于 2023-2-18 10:13
我就说下思路。
1.符号用随机数生成,1代表+,0代表-
随机数初始化 srand(time(NULL))调用rand()


1小时了,请问好了吗,对啦既然你是svip,换一个好了,听歌软件ios+win+andriod+web四选二如何

ExiaGN001 发表于 2023-2-19 09:47:13

匿名者 发表于 2023-2-18 12:13
1小时了,请问好了吗,对啦既然你是svip,换一个好了,听歌软件ios+win+andriod+web四选二如何

再等等

Mike_python小 发表于 2023-2-19 10:00:45

自己的作业自己做,自己的屁股自己擦,让别人写作业还不让别人知道自己是谁?见不得人?

Anonymous 发表于 2023-2-19 13:00:25

Mike_python小 发表于 2023-2-19 10:00
自己的作业自己做,自己的屁股自己擦,让别人写作业还不让别人知道自己是谁?见不得人?

不是作业,{:10_291:}

你请我愿的,我也付出鱼碧了

Anonymous 发表于 2023-2-19 13:04:34

Mike_python小 发表于 2023-2-19 10:00
自己的作业自己做,自己的屁股自己擦,让别人写作业还不让别人知道自己是谁?见不得人?

编程我都是自己学得,时间本来就不多,五天在学校,在家里还有我弟,我学校都不上信息课的,哪来的作业,要有也是python,怎么可能是c,匿名是因为不好意思,技术差,麻烦不要自以为事,不要随意搞我心态

Anonymous 发表于 2023-2-19 13:06:17

ExiaGN001 发表于 2023-2-19 09:47
再等等

谢谢

ExiaGN001 发表于 2023-2-19 13:11:59

匿名者 发表于 2023-2-19 13:06
谢谢

1~4项已经好了,第五项说的再详细些行吗

Mike_python小 发表于 2023-2-19 13:26:04

本帖最后由 Mike_python小 于 2023-2-19 13:30 编辑

匿名者 发表于 2023-2-19 13:04
编程我都是自己学得,时间本来就不多,五天在学校,在家里还有我弟,我学校都不上信息课的,哪来的作业 ...

https://fishc.com.cn/space-uid-1030543.html
沐雨尘枫

是你吧

匿名是因为不好意思,没有作业

那你写这个程序是为了什么呢?

你自己一点代码都没有,哪怕有一点错误的代码代表了你有思考都行

我自以为是?我哪句话说我自己为是了?

是作业就自己承认,没必要躲躲藏藏,不是作业就自己先思考,放出自己的思考过程
不会的再问大家,这样谁都乐意为你解决的问题,而不是看着你那要求,跟完成任务一样为你解决你的问题或作业

Mike_python小 发表于 2023-2-19 13:29:08

匿名者 发表于 2023-2-19 13:00
不是作业,

你请我愿的,我也付出鱼碧了

恕我直言,我说话可能不太好听,50育碧根本没有实际意义,只是论坛里有一些大佬不图这些,也乐于助人,给你写了。这要放在一些群里,肯定是收费解决的

Anonymous 发表于 2023-2-19 13:42:41

Mike_python小 发表于 2023-2-19 13:26
https://fishc.com.cn/space-uid-1030543.html
沐雨尘枫



只是单纯的需要

Anonymous 发表于 2023-2-19 13:43:12

Mike_python小 发表于 2023-2-19 13:29
恕我直言,我说话可能不太好听,50育碧根本没有实际意义,只是论坛里有一些大佬不图这些,也乐于助人,给 ...

这点我赞同

Anonymous 发表于 2023-2-19 13:46:29

ExiaGN001 发表于 2023-2-19 13:11
1~4项已经好了,第五项说的再详细些行吗

不用了,这是我答应的东西
https://www.aliyundrive.com/s/Wqg3WKuzL7Z
https://www.aliyundrive.com/s/kpmzMoeKKWR
https://wenjiu.lanzoum.com/iSqRW0nra5p

ExiaGN001 发表于 2023-2-19 13:56:25

本帖最后由 ExiaGN001 于 2023-2-19 13:58 编辑

匿名者 发表于 2023-2-19 13:46
...

1,3均失效(
页: [1] 2
查看完整版本: 做个复杂的东西