导航:首页 > 编程知识 > 这道c语言编程题怎么做

这道c语言编程题怎么做

发布时间:2023-08-07 23:37:22

㈠ C语言编程,这题怎么做

运行结果是945组,代码如下:
#include <stdio.h>
int FindNext(int A_index[], int B_index[], int group[],int x, int q, int start)
{
int m=start, flag, p;
if((q>0)&&(start<group[q-1]))
{
m=group[q-1];
}
for(;m<x;m++)
{
flag=0;
for(p=0;p<q;p++)
{
if((A_index[group[p]]==A_index[m])
||(A_index[group[p]]==B_index[m])
||(B_index[group[p]]==A_index[m])
||(B_index[group[p]]==B_index[m]))
{
flag=1;
break;
}
}
if(flag==0)
{
return m;
}
}
return -1;
}
int AnalyseArray(int data[])
{
int A_index[1000], B_index[1000];
int i, j, k, m, n=0, x=0, y=4, q=0, last=0;
int group[1000][5];

for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if((j!=i)&&(data[j]>data[i]))
{
A_index[x]=i;
B_index[x]=j;
x++;
}
}
}

do
{
m=FindNext(A_index, B_index, group[n], x, q, last);
if(m>=0)
{
group[n][q]=m;
q++;

if(q>=5)
{
y=4;
n++;
last=group[n-1][y]+1;
q=y;
for(m=0;m<y;m++)
{
group[n][m]=group[n-1][m];
}
}
}
else
{
y--;
if(y>=0)
{
last=group[n-1][y]+1;
q=y;
for(m=0;m<y;m++)
{
group[n][m]=group[n-1][m];
}
}
}
}while(y>=0);

printf("组合有: \n");
for(i=0;i<n;i++)
{
printf("%d) A组[",i+1);
for(k=0;k<5;k++)
{
m=group[i][k];
j=A_index[m];
printf("%d ",data[j]);
}
printf("]; B组[");
for(k=0;k<5;k++)
{
m=group[i][k];
j=B_index[m];
printf("%d ",data[j]);
}
printf("]\n");
}

return n;
}

int main()
{
int DATA[10]={0,1,2,3,4,5,6,7,8,9};
int ret = AnalyseArray(DATA);
printf("共%d组\n",ret);
return 0;
}

㈡ 这道编程题用c语言怎样写

这道题目,方法很多,True和False输入的是字符串,计算的其实是0和1,所以只要用1个字节记录每次输入的0和1就可以了。我这里代码用动态创建的字符串数组来记录输入,每一个字符串表示一组输入,每一个字符的值(0或者1)对应(True或者False)。包含输入验证。

#include<stdio.h>

#include<string.h>

#include<malloc.h>

#define DSIZE 2 //数据的组数,表示有几组数据的输入,题目演示中是2组,想改修改该值

int main()

{

int i,j,n,s;

char inStr[6];

char **list=NULL,*nlist=NULL;

//=================input============================

list=(char **)malloc(sizeof(char *)*DSIZE);

if(!list)

return 0;

for(i=0;i<DSIZE;i++)

{

n=0;

while(n<1 || n>100)

scanf("%d",&n);

nlist=(char *)malloc(sizeof(char)*(n+1));

if(!nlist)

return 0;

nlist[n]=0;

for(j=0;j<n;j++)

while(1)

{

scanf("%s",inStr);

if(!strcmp(inStr,"True"))

nlist[j]=1;

if(!strcmp(inStr,"False"))

nlist[j]=0;

if(strcmp(inStr,"True") && strcmp(inStr,"False"))

printf("无效输入!必须输入True或者False! ");

else

break;

}

list[i]=nlist;


}

//===============output=======================

for(i=0;i<DSIZE;i++)

{

s=0;

n=strlen(list[i]);

for(j=0;j<n;j++)

s+=list[i][j];

printf("%d ",s);

}

return 0;

}

㈢ 请问一下这道C语言编程题怎么做

#include<stdio.h>
int main()
{
char str[80];
int offset;
int i;
scanf("%s", str);
scanf("%d", &offset);
for(i = 0; str[i]; i++)
if(str[i] != ' ')
str[i] += offset;
printf("%s\n", str);
return 0;
}

㈣ 初学编程,大家帮忙看下这道c语言题怎么做万分感谢

第一题审题关键:题目中的转换规则就是字母在数组中第一次出现的顺序(顺序是从0开始自增)。

(注意数字是自增数(重复字母不自增,不同字母才自增),不是第一次出现的下标,因为题目有条件:使用数字的最大值等于转换规则的数目-1)

因此代码需要实现以下功能:

一、数组输入,需要有验证(验证输入的是否是小写,可嵌套循环判断)。

二、遍历数组,生成规则列表,可用数组char B[10]和int C[10]来记录规则,B数组是字母,C是该字母对应的顺序(顺序用变量自增)。比如数组char A[10]={a,b,a,d,e,f,d,g,j,k};循环每个元素,和数组B中对比,存在就跳过,不存在就将该字母记录到B中,并将顺序变量自增后记录到C数组对应的下标元素。

三、循环AB两个数组,通过对比,把数组A中元素替换成对应C中数字(或用新数组a来保存替换结果,原因见下)。

(注意:A是字符数组,c是整型数组,把数字直接存放到A,打印输出的时候按整型打印,实际就是把数字当成ASCII码保存了,打印数字就打印ASCII码。或者一开始就把A定义成字符串数组,最后把数字用ltoa()转换成字符串再存放到A中,打印用%s格式打印)。

如要接第二题整型a数组,这里可直接把对比结果保存在int a[10]数组中(和原数组A分开)。这样a可直接用于第二题。

第二题审题:根据上题的a内容定义n个数组(n=a中最大值-a中最小值+1),之后按照题目要求填充这几个数组,最后打印即可


㈤ 这个c语言编程题如何求解

如果非要用两个函数,则:
sum1函数可以用等差数列求和公式降低时间复杂度
时间复杂度O(n)

其实sum2本身就有求和公式:
1+(1+2)+...+(1+2+...+n)=n(n+1)(n+2)÷6
时间复杂度O(1)
详见代码
#include<bits/stdc++.h>
#include<chrono>
#define int unsigned long long
using namespace std;
using namespace chrono;
int n;
//法1(O(n^2))
int sum11(int k){
int s=0;
for(int i=1;i<=k;i++) s+=i;
return s;
}
int sum12(int n){
int s2=0;
for(int i=1;i<=n;i++) s2+=sum11(i);
return s2;
}
//法2(O(n))
int sum21(int k){
return (1+k)*k/2;
}
int sum22(int n){
int s2=0;
for(int i=1;i<=n;i++) s2+=sum21(i);
return s2;
}
//法3
int sum32(int n){
return n*(n+1)*(n+2)/6;
}
signed main(){
cin>>n;
auto start1=system_clock::now();
cout<<"法1:"<<sum12(n);
auto end1=system_clock::now();
auto ration1=ration_cast<microseconds>(end1-start1);
cout<<" 用时"<<double(ration1.count())*microseconds::period::num/microseconds::period::den<<"秒"<<endl;
auto start2=system_clock::now();
cout<<"法2:"<<sum22(n);
auto end2=system_clock::now();
auto ration2=ration_cast<microseconds>(end2-start2);
cout<<" 用时"<<double(ration2.count())*microseconds::period::num/microseconds::period::den<<"秒"<<endl;
auto start3=system_clock::now();
cout<<"法3:"<<sum32(n);
auto end3=system_clock::now();
auto ration3=ration_cast<microseconds>(end3-start3);
cout<<" 用时"<<double(ration3.count())*microseconds::period::num/microseconds::period::den<<"秒"<<endl;
return 0;
}
运行结果:
80000
法1:85336533360000 用时6.85699秒
法2:85336533360000 用时0秒
法3:85336533360000 用时0秒
------
望您采纳,谢谢

㈥ C语言编程题怎么做

#include <stdio.h>

int main()
{
void _m(char *p1, char *p2, int m);
char str1[100], *p1=str1, str2[100], *p2=str2;
int m;
printf("请随便输入一个字符串:");
gets(p1);
printf("您输入的字符串为:\n%s\n\n", p1);
printf("您打算从第几个字符开始复制呢?\n");
scanf("%d", &m);
_m(p1, p2, m);
printf("\n复制得到的另一个字符串为:\n%s", p2);
return 0;
}

void _m(char *p1, char *p2, int m)
{
int i;
char *temp=p1+m-1;
for(;*temp!='\0';){
*p2++ = *temp++;
}
}

阅读全文

与这道c语言编程题怎么做相关的资料

热点内容
qq怎么查看别人的收藏 浏览:135
地震三参数matlab程序 浏览:57
怎样给优盘文件加密软件 浏览:7
收拾文件有哪些小妙招 浏览:431
pdf文件去底网 浏览:253
win10重装系统需要格式化c盘吗 浏览:424
路由器trx文件 浏览:655
淘宝店铺数据包怎么做 浏览:195
win10键盘黏连 浏览:332
json如何生成表格 浏览:323
怎么修复sql数据库表 浏览:40
微信微博差别 浏览:163
签到积分换礼品app 浏览:812
mfc最近打开文件 浏览:672
app埋点平台都有哪些app 浏览:314
瑞斯康达网络管理界面 浏览:254
ca证书管理器linux 浏览:358
苹果id安全提示问题3个字符 浏览:949
iphone上好的拍照软件 浏览:579
word内嵌文件怎么下载 浏览:864

友情链接