导航:首页 > 编程知识 > 编程题怎么解答

编程题怎么解答

发布时间:2023-01-18 22:39:48

『壹』 (1)(2)两道编程题怎么做,求大神解答。

代码如下:

#include<stdlib.h>
#include<stdio.h>

boolnotSmall(inta,intb){
returna>=b;
}
boolnotBig(inta,intb){
returna<=b;
}
typedefbool(*Compare)(int,int);
intmain()
{
printf("inputanumber:");
charsNum[256]="";
scanf("%s",sNum);
for(size_ti=0;i<strlen(sNum);i++)
{
if((sNum[i]==' ')||(sNum[i]=='r'))break;
if(unsigned(sNum[i]-'0')>9){
printf(" errornumcharacter! ");
return-1;
}
}
intarray1[11]={0,1,2,3,4,5,6,7,8,9};
//既然是有序的,直接插入就好了
Comparecmp;
if(array1[0]>array1[1]){//降序排列
cmp=notBig;
}else{//升序
cmp=notSmall;
}
intn=atoi(sNum);
//转化为整数输出第一题
printf("numberis%d! ",n);
inttmp;
//第二题
for(inti=0;i<sizeof(array1)-1;i++)
{
if(cmp(n,array1[i]))continue;
for(intj=i;j<sizeof(array1)-1;j++)
{//插入
tmp=array1[i];
array1[i]=n;
n=tmp;
}
break;
}
return0;
}

『贰』 C语言编程题,求大神解答!!!!

按照题目要求用二分法求方程的实根的C语言程序如下

#include <stdio.h>

#include <math.h>

double f(double x) {return 2*x*x*x - 4*x*x + x - 2;}

int main(){

double root, x1 = 0, x2 = 10,y;

root = x1+(x2-x1)/2;

y = f(root);

while(fabs(y) > 1e-6) {

if(y > 0) x2 = root;

else x1 = root;

root = x1+(x2 - x1)/2;

y = f(root);

}

printf("%.2f ",root);

return 0;

}

『叁』 这个编程题怎么做 谢谢解答

因为限制了只有三个数字,所以我的思路为:列出所有组合情况,冒泡排序后找到最大值即可。

我使用的是java


public class T {
public static void main(String[] args) {
int A = 13;
int B = 312;
int C = 343;
//求出所有组合结果,根据排列组合,结果应有以下6种:
//ABC、ACB、BAC、BCA、CAB、CBA
//怕你用的不是java,这里采用通用一些的方法来获得结果集
int[] results = new int[6];
results[0] = getResult(A, B, C);
results[1] = getResult(A, C, B);
results[2] = getResult(B, A, C);
results[3] = getResult(B, C, A);
results[4] = getResult(C, A, B);
results[5] = getResult(C, B, A);
System.out.println("所有组合结果为:");
for (int result : results) {
System.out.println(result);
}
//使用冒泡排序获取最大值
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5 - i; j++) {
if (results[j] > results[j++]) {
int temp = results[j];
results[j] = results[j + 1];
results[j + 1] = temp;
}
}
}
System.out.println("========");
System.out.println("冒泡排序结果为:");
for (int result : results) {
System.out.println(result);
}
System.out.println("========");
System.out.println("所以这些组合中数字最大的为:[" + results[5] + "]");
}
//计算每种组合的结果,计算规则为:
//1、先将y和z组合起来,如果z有n位,组合结果为 yz = y*10的n次方 + z
//2、再将x和yz组合起来,如果yz有n位,组合结果为 xyz = yz*10的n次方 + yz
private static int getResult(int x, int y, int z) {
int yz = (int) (y * Math.pow(10, countNumber(z))) + z;
int xyz = (int) (x * Math.pow(10, countNumber(yz))) + yz;
return xyz;
}
//数一下n有多少位
private static int countNumber(int n) {
int count = 0;
while (n != 0) {
n /= 10;
count++;
}
return count;
}
}


后续还能优化的地方就在于三个数字的排列组合部分,现在用比较傻的写死的方式,未来如果加到4个数字或者其他那就得改代码了


代码就是会挤到一起,我截图给你看下:

『肆』 这个编程题怎么写,谢谢解答

C语言代码和运行结果如下:

注意C语言中n/2默认下取整,结果为小于等于n/2的最大整数

而题目所求为小于n/2的所有偶数,所以要对n/2进行上取整,即写为(n+1)/2

可见输出结果与样例相符,望采纳~

附源码:

#include <stdio.h>

int main() {

int n, i, sum = 0;

scanf("%d", &n);

for (i = 0; i < n; i += 2) {

printf("%d ", i);

if (i < (n + 1) / 2)

sum += i;

}

printf("偶数之和为:%d ", sum);

return 0;

}

『伍』 C语言编程题,求助大佬解答

按照题目要求编写的求最大值和最小值及它们的位置的C语言程序如下

#include<stdio.h>

int max(int a[],int n,int *p){

int i=0,m=a[0];

*p=i;

for(i=1;i<n;i++){

if(m<a[i]){

m=a[i];

*p=i;

}

}

return m;

}

int min(int a[],int n,int *p){

int i=0,m=a[0];

*p=i;

for(i=1;i<n;i++){

if(m>a[i]){

m=a[i];

*p=i;

}

}

return m;

}

int main(){

int m,n,t=0,*p=&t,a[10]={31,28,73,83,27,56,12,43,34,63};

m=max(a,10,p);

printf("最大值为%d,位置为%d ",m,*p);

n=min(a,10,p);

printf("最小值为%d,位置为%d ",n,*p);

return 0;

}

『陆』 这个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++编程题,求大神解答。

基本思想是计算相邻的机器人每轮发生碰撞的时间,从小到大排列后依次发生碰撞

剩下的机器人相邻关系会改变,重新计算碰撞时间,重复上述步骤,直到没有碰撞发生

C++代码如下:

#include <bits/stdc++.h> // C++万能头文件

using namespace std;

using tri = tuple<double, int, int>; // 发生碰撞的时间和机器人编号

int main() {

int n, k;

cin >> n;

k = n; // 剩下机器人个数

int x[n + 1], v[n + 1]; // 初始位置和速度

for (int i = 1; i <= n; ++i) // 编号从1开始

cin >> x[i] >> v[i];

int crash[n + 1]; // 标记已碰撞的机器人

memset(crash, 0, sizeof(crash));

priority_queue<tri, vector<tri>, greater<tri>> pq; // 小根堆

while (k >= 2) { // 至少两个机器人才能相撞

int i = 1;

while (i < n && crash[i]) ++i;

while (i < n) {

int j = i + 1; // 计算与右侧机器人相撞时间

while (j <= n && crash[j]) ++j;

if (j > n) break;

long d = x[j] - x[i];

if (v[i] <= 0 && v[j] < v[i] // j撞上i

|| (v[i] > 0 && v[j] < v[i])) { // i撞上j

long delta_v = v[i] - v[j];

double t = d * 1.0 / delta_v;

pq.emplace(t, i, j);

}

i = j;

}

if (pq.empty()) break; // 没有相撞的机器人

while (!pq.empty()) {

auto t = pq.top();

pq.pop();

int ii = get<1>(t), jj = get<2>(t);

if (!crash[ii] && !crash[jj]) { // 都还在才能相撞

crash[ii] = crash[jj] = 1;

k -= 2;

}

}

}

cout << k << " ";

for (int i = 1; i <= n; ++i) {

if (!crash[i])

cout << i << " ";

}

cout << " ";

return 0;

}

已通过给出的测试用例,但需要更多用例测试是否正确,望采纳~

『捌』 这2编程题怎么解

第一题:接收输入的数number,判断number/100<10是否成立,不成立则不满足要求。
若成立,个位数 = number%100;
十位数 = number/10%10;
百位数 = number/100;
输出他们即可。

『玖』 C语言有一道题该如何解答

&&称作逻辑与,运算规则是:只要A与B其中一个为假,A && B为假。
对整数来说,C语言认为:0为假,非0为真,所以:(x==a)&&(y=b)&& 0为假。
“假”在C语言中按整数输出就是0。
有一条很实用的编程经验:写&&表达式时,将最有可能为假的条件写在最左边,因为&&从左向右运算,即检查条件,只要遇到某条件为假,就不会再往后继续,因为已可以判定这个表达式结果为假。
比如:S = A && B && C && D,按上述经验,最有可能为假的顺序应为A,B,C,D。
在程序执行过程中,只要判定A为假,则S为假,根本不需要再计算B,C,D,这可能让程序执行的更快。

阅读全文

与编程题怎么解答相关的资料

热点内容
无法找到文件中可删除的图片 浏览:739
dnf90版本副职业 浏览:848
c只读打开文件 浏览:575
如何在电脑文件上添加图片 浏览:297
xslist网站怎么登录 浏览:735
ftp不能直接打开文件 浏览:145
ps调整后的xps文件 浏览:572
小米如何取消wifi和数据同时使用 浏览:347
微信数据6个g怎么清理 浏览:533
找厂房去哪个app 浏览:881
linuxmini 浏览:997
如何找编程类的工作 浏览:286
jsp从mysql读取时间 浏览:680
有什么app可以存app 浏览:603
游戏编程从哪里学的 浏览:738
win8文件布局 浏览:308
数据存储参数配置文件 浏览:122
面膜去哪个网站买好 浏览:627
天下游旧版本 浏览:622
iphone6按键震动 浏览:528

友情链接