導航:首頁 > 編程知識 > 編程題怎麼解答

編程題怎麼解答

發布時間: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,這可能讓程序執行的更快。

閱讀全文

與編程題怎麼解答相關的資料

熱點內容
電腦寬頻連接共享wifi密碼 瀏覽:655
最新微粒貸app官方下載 瀏覽:923
win10電腦怎麼休眠不斷網 瀏覽:530
如何查到網站的伺服器 瀏覽:225
編程怎麼確定一個數的位數 瀏覽:362
如何安裝ae腳本文件夾 瀏覽:914
商品驗偽用什麼APP查 瀏覽:350
請問大數據與會計專業做什麼的 瀏覽:77
如何修改數據上年結轉 瀏覽:6
win7一直配置文件重啟 瀏覽:124
佳能ir2525i網路掃描 瀏覽:283
win10指紋無法識別 瀏覽:646
jsp中怎麼引入js文件 瀏覽:925
文件名構成部分 瀏覽:484
興國互聯網app有哪些 瀏覽:475
北京時間票房多少票房統計數據 瀏覽:750
探探文件夾是哪個 瀏覽:429
如何分類微信文件 瀏覽:446
城市天際線win10 瀏覽:813
運動APP跑步如何抓作弊 瀏覽:57

友情鏈接