當前位置:首頁 » 編程語言 » c語言怎樣實現數的拆分組合
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎樣實現數的拆分組合

發布時間: 2022-12-21 02:07:49

㈠ 怎樣用c語言實現數據的分組與排序

那個限制的策略到底是什麼

也就是限制的數據是怎麼得來的?

如果知道這個的話

寫一個枚舉演算法的程序就行了

枚舉這10個數據所有的組合情況

總的組數為 (C2/10)*(C2/8)*(C2/6)*(C2/4)

一點也不大

然後把每組組合按照條件所要求的限制數據判斷一下

如果全都成立 就可以輸出

否則就繼續下一組

㈡ 如何用c語言將一個數分解成加數相加的形式

/*我特地到CSDN給你問的 剛來查看 發現有團隊用我在論壇的帖子的回復給你答案了 不過我還是把最佳的答案回復給你吧!*/
#include <stdio.h>

#include <stdlib.h>
void print(int res[], int num) {
static int L=0;
L++;
printf("%8d:",L);
for (int i=0;i<num;++i) {
printf(" %d", res[i]);
}
printf("\n");
}
void split(int n, int m) {// n表示總數,m表示最大因子
static int res[100];// 保存結果
static int num=-1;// 當前因子下標

if (n<m || n<0 || m<1) return;
num++;
if (0==n) {// 遞歸終止條件,為0不可再分,直接輸出
print(res,num+1);
num--;
return;
} else {
if (n==m) {// 不拆,直接輸出
res[num]=m;
print(res,num+1);
num--;
} else {
// 拆分出第一個
res[num]=m;
n=n-m;

if (m>n) m = n; // 最大因子不可能大於總數

for (int i=m;i>=1;--i) {// 循環,第二個因子可以繼續拆分,而且按照最大因子不同可以拆分成多個
split(n,i);
}
num--;
}
}
}
void Split(int n) {
if (n<=0) return;
if (100<n) {
printf("Up to 100\n");
return;
}
for (int i=n;i>=1;--i) {
split(n, i);
}
}
int main(int argc,char **argv) {
int num;
scanf("%d",&num);
if (argc<=1) Split(num);
else if (argc>=3) split(atoi(argv[1]),atoi(argv[2]));
else Split(atoi(argv[1]));
return 0;
}

㈢ c語言一個數分解成獨立的數字

#include <stdio.h>
main()
{
int a;
scanf("%d",&a);
do
{
printf("%d,",a%10);
}
while(a/=10);
}
過去做的一道作業,貌似差不多,沒放到數組里而已。
#include <stdio.h>
main()
{
int a;
int num[4]={0};
int n=3;
scanf("%d",&a);
do
{
num[n]=a%10;
n--;
}
while(a/=10);
for(n=0;n<4;n++)
printf("%d,",num[n]);
}
簡單修改了一下

㈣ c語言數字拆分

pow函數學過吧? 就是平方pow(a,b) a的b次方
我暫時想不到什麼簡單的演算法 先給個復雜的

#include<stdio.h>
#include<math.h>
int main()
{ int n,s=-1,d,m;
scanf("%d",&n);
m=n;
while(m)
{
m/=10;
s++;
}
while(s>-1)
{
d=n/pow(10,s);
n-=d*pow(10,s);
printf("%d",d);
s--;
}

}

㈤ C語言如何把一個數分解

#include<stdio.h> void f(int x) { while(x) { printf("%d ",x%10); x=x/10; } } void main() { f(568); } 這是逆序輸出,要順序輸出 用一個數組保存再輸出就行了

㈥ C語言:數值拆分問題

#include<stdio.h>

intmain()
{
intarray[10];
inti,j;
inttemp[10]={0};
intm;
printf("pleaseinput10numbers,formatis(1000~9999): ");
//獲取輸入的10個數字
for(i=0;i<10;)
{
printf("pleaseinputthe%dofthenumber:",i+1);
scanf("%d",&array[i]);
if((array[i]>=1000)&&array[i]<=9999)
i++;
}
//對得到的10個數字取千位+百位+十位+個位的和存入另一個數組
for(i=0;i<10;i++)
{
m=array[i];
for(j=0;j<4;j++)
{
temp[i]+=m%10;
m/=10;
}
}
//依據千位+百位+十位+個位的和,對和數組和原來數組排序
//本題目採用冒泡法排序
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(temp[i]>temp[j])
{
m=temp[i];
temp[i]=temp[j];
temp[j]=m;
m=array[i];
array[i]=array[j];
array[j]=m;
}
}
}
//輸出排序後的結果
for(i=0;i<10;i++)
{
printf("%-6d",array[i]);
}
printf(" ");

return0;
}

㈦ 如何用C語言拆分整數

將一個整數的各個位分離出來的最簡單方法就是模10,取個位數,直到該變為0。
參考代碼:
#include <stdio.h>
void main()
{
int n=0;
scanf("%d", &n );
do {
printf("%d\n", n%10 ); //每次輸出個位
n/=10 ; //縮小10倍,去除原來的個位。
}while(n);
}
但這整拆分的特點是從後向前輸出每一位數。
如果僅是為了輸出,還想正向輸出每一位數,則可用遞歸函數來解決。(也可以實現逆向輸出)
參考代碼:
#include <stdio.h>
void split_int( int n )
{
if ( n>0 )
{
//printf("%d\n", n%10 );//逆向輸出,放開這里,關閉下面的printf().即:先輸出當前個位,再去高位的數
split_int( n/10 );//先去輸出高位的數
printf("%d\n", n%10 ); //再輸出當前的個位數
}
}
void main()
{
int n;
scanf("%d", &n);
split_int(n);
}
如果想把分離開的數據存儲到數組中,則最簡單的方法是將整數用sprintf()存儲到字元數組中,然後,遍歷數組,逐位取出。
參考代碼:
#include <stdio.h>
void main()
{
int n,i;
char str[20];
scanf("%d", &n);
sprintf(str,"%d", n);
for( i=0;str[i];i++ ) //正向輸出
printf("%c\n", str[i] );
for( i--;i>=0;i-- ) //逆向輸出
printf("%c\n", str[i] );
}

㈧ c語言如何拆分數字

1、直接以字元串的形式讀入數據,然後以字元數組的形式挨個拆分每位數字即可。
2、常式:

#include<stdio.h>
#include<string.h>
intmain()
{
chara[30];
inti,l;
printf("請輸入一整型數字:");
gets(a);
printf("數字拆分如下: ");
l=strlen(a);
for(i=0;i<l;i++)
printf("%d",a[i]-'0');//將數字字元轉為數字值
printf(" ");
}

㈨ C程序實現將一個數分解成多個質數相加

假設數為n,找出所有小於n的質數(看題目似乎應該包括1),然後用回溯法統計.

arr[0] = 1; // 提出1
arr[1] = 2; // 提出2,是便於下面的i+=2
int idx = 2;
// 找出小於n的質數,所以條件為i<n
for (int i=3; i<n; i+=2) {
int flag = 1;
// 確定i是否為質數,所以條件為j<(int)sqrt(i)
for (int j=2; j<(int)sqrt(i); ++j) {
// 非質數,退出
if (i%j == 0) {flag = 0;break;}
} // end for j
if (flag) arr[idx++] = i;
} // end for i

大概就是這樣吧.當然,arr的大小需要確定,n不能過大,要是太大就麻煩了,嘿嘿...

㈩ C語言怎麼拆分一個數字輸入123,使A=1B=2C=3

#include<stdio.h>
#include<math.h>
void main()
{
int a,b,c,n;
double d;
printf("輸入一個三位數\n");
scanf("%d",&n);
a=n/100;//百位
b=(n%100)/10;//十位
c=n%10;//個位
d=pow(a,3);//pow()是一個函數,包含於math.h文件中,此處是求a的3次方
//pow(m,n)用法如下,m是冪,n是指數,運算出來的結果是double類型
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("a的三次方是%f\n",d);
}