㈠ 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++;
}
}