|
阅读:4648回复:0
c语言算法题
( c语言不是太熟悉,代码有问题的,或者有更好的实现方法,欢迎留言^_^ )
1、编写程序实现输出_100 元人民币兑换成1元、2元、5元的所有兑换方案。提示,1*x+2*y+5*z=100,其中x,y,z为非负整数。 int main(){
int five =0,two=0,one=0,count = 0;
for(five = 0; five<=20 ; five++){
for(two = 0 ; two<=50;two++){
if(five*5+two*2<=100){
one = 100 - five*5 - two*2;
count++;
printf("1元、2元、5元的数量分别为:%d,%d,%d\r\n",one,two,five);
}
}
}
printf("共%d种方法",count);
return 0;
}2、编写程序实现对给定的某年某月某日,计算并输出它是这一年的第几天。给定的日期从键盘输入 int main(){
int year,month,day;
printf("请输入年,月,日");
scanf("%d-%d-%d",&year,&month,&day);
printf("%d,%d,%d",year,month,day);
printf("这是这一年的第%d天",DayofYear(year,month,day));
return 0;
}
int DayofYear(int year,int month, int day){
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int total=day;
int i;
for(i=0;i<month-1;i++){
total+=m[i];
}
if(month>2){//大于才会涉及到判断是否为闰年
//判断是否为闰年
if(year%4==0&&year%100!=0||year%400==0){
total++;
}
}
return total;//返回第多少天
}3. 编写程序计算如下式子: cos(x)~1-x/2!+x4/4! - x6%6! +...,要求最后一项的绝对值小于1e-5为止 #include <stdio.h>
#include <math.h>
int main(){
float x;
int n=0;
double fen=1,mu=1,sum=1,single = 1;
printf("请输入x的值");
scanf("%f",&x);
while(fabs(single)>1e-5){
fen = (-1)*x*x;
mu = mu*(n+1)*(n+2);
single = fen / mu;
sum += single;
n+=2;
}
printf("cosx的值为%f",sum);
return 0;
}4.编写程序实现将一个4×4的数组进行顺时针旋转90度后输出。要求,原始数组的数据从键盘随机输入,新数组以4行4列的方式输出 #include <stdio.h>
int main(){
int a[4][4],b[4][4];
int i,j;
// 接受一个4x4的矩阵
for(i=0;i<4;i++){
printf("请第%d行的4位数:\n",(i+1));
for( j=0;j<4;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++){
for(j=0;j<4;j++){
b[j][i]=a[i][j];
}
}
// 输出旋转后的矩阵
for(i=0;i<4;i++){
printf("%d %d %d %d\n",b[i][0],b[i][1],b[i][2],b[i][3]);
}
return 0;
}5. 编写程序实现在一个按照升序排序的数组中查找x应插入的位置,并将x插入数组中,使得数组元素仍按照升序排列,输出插入后的数组。原数组和x值由键盘输入,插入操作用函数实现。 #include <stdio.h>
int main(){
int arr[7] = {2,45,67,77,89,110};
int x,i;
int index = -1; //x的位置
int len = sizeof(arr) / sizeof(arr[0]);
printf("请输入要插入的x:");
scanf("%d",&x);
for(i=0;i<len;i++){
if(x<arr[i]){
index = i; // 当前的i,即为x要插入的位置
break;
}
}
if(index!=-1){
for(i=len-1;i>index;i--){
arr[i] = arr[i-1];
}
arr[index]=x;
}
else{ // x比数组中所有的数都大
arr[len-1]=x;
}
printf("插入x后的数据排列顺序:\n");
// len = sizeof(arr) / sizeof(arr[0]);
for(i=0;i<len;i++){
printf("%4d",arr[i]);
}
return 0;
}6. 设计程序实现以下功能:在键盘上输入一个十进制正整数,将该数转换为其对应的二进制数,并在屏幕上输出 #include <stdio.h>
int main(){
int num,i;
printf("请输入一个数");
scanf("%d",&num);
int count = 0;
int bit[64];
while(num>=2){
bit[count]=num%2;
num=num/2;
count++;
}
bit[count]=num;
printf("对应二进制为:");
for(i=count;i>=0;i--){
printf("%d",bit[i]);
}
return 0;
}7.鸡兔同笼:已知笼里共有35个头,94条腿,请设计程序计算出该笼里鸡、兔分别有多少只 #include <stdio.h>
int main(){
int ji,tu;
for(ji=0;ji<35;ji++){
tu = 35-ji;
if(ji*2+tu*4==94){
printf("鸡的数量为:%d,兔的数量有:%d",ji,tu);
}
}
return 0;
}8.已知一个整数有序序列,请设计程序实现以下功能:对任意输入的整数x,查找x是否在该序列中,如果查找成功,则输出x在序列中的位置,否则输出“查找失败”的提示。 注:有序序列,程序中指升序;如果是降序,方法不一样 #include <stdio.h>
int main(){
int arr[7]={12,33,46,67,78,99,110}; //这里采用升序
int len = sizeof(arr)/sizeof(int);
int num,i,result=-1;
printf("请输入你要查找的数");
scanf("%d",&num);
for(i=0;i<len;i++){
if(num==arr[i]){
result = i;
break;
}else if(num<arr[i]){
break; // 因为是有充列的不需要判断了
}
}
if(result==-1){
printf("查找失败");
}else{
printf("查找成功,对应位置为:%d",result);
}
return 0;
}9.输入一字符串,检查是否为回文,若是则输出“回文”,否则输出“非回文” 回文字符串:是一个正读和反读都一样的字符串。如:LeveL #include <stdio.h>
#include <string.h>
int main(){
char str1[200] = "\0";
gets(str1);
int i,j;
int flag=0;
for( i=0,j=strlen(str1)-1;i<j;i++,j--){
if(str1[i]!=str1[j]){
flag=1;
break;
}
}
printf("%s\n",flag==1?"不是回文":"是回文");
return 0;
}10. 计算e = 1 + 1/1! + 1/2! + ... + 1/n!的值并输出(设n=15) #include <stdio.h>
int main(){
double sum=1,temp;
long int n=1,mu=1;
while(n<=15){
mu = mu*n;
temp = 1/(float)mu;
printf("mu%lf\n",temp);
sum += 1/(float)mu;
n++;
}
printf("计算结果为:%lf",sum);
return 0;
}11.从键盘上输入两个3×3的矩阵,分别求出这两个矩阵的转置结果及两个矩阵的和,并输出。要求: (1)设计函数InputMatrix,用于实现矩阵输入; (2)设计函数ReverseMatrix,用于实现矩阵转置; (3)设计函数AddMatrix,用于实现两个矩阵和; (4)设计函数OutputMatrix,用于实现矩阵输出,在屏幕上显示: (5)设计主函数main,分别调用这些自定义函数进行测试。 #include <stdio.h>
#include <string.h>
int main(){
int A[3][3]={1,2,3,4,5,6,7,8,9},B[3][3]={3,4,5,6,4,5,3,4,5},C[3][3];
// void InputMatrix(int *A[3][3]);
void ReverseMarix(int A[3][3]);
void AddMatrix(int A[3][3],int B[3][3],int C[3][3]);
//InputMatrix(&A);
//InputMatrix(&B);
int i,j;
printf("输出的矩阵为\n");
OutputMatix(&A);
/**/
AddMatrix(A,B,C);
ReverseMarix(&A);
printf("转置后的矩阵为\n");
OutputMatix(&A);
}
// 两个矩阵之和
void AddMatrix(int A[3][3],int B[3][3],int C[3][3]){
int i,j,sum,t,s;
int a,b;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
// A的第i行元素 * b第j先元素的和
sum = 0;
for(s=0;s<3;s++){
// printf("%d",*A[i,s]);
a = A[i][s];
b=B[s][j];
printf("%d",b);
sum+= a+b;
}
sum=A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j];
C[i][j]=sum;
}
}
// printf("求和后的矩阵为\n");
OutputMatix(C);
}
// 输出矩阵的值
void OutputMatix(int A[3][3]){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%10d",A[i][j]);
}
printf("\n");
}
}
// 矩阵转置
void ReverseMarix(int A[3][3]){ //实现矩阵的转置
printf("进行转置方法");
int temp[3][3]; //临时矩阵
//将矩阵A的值,赋值给矩阵temp
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
temp[i][j] = A[i][j];
// printf("%d",*A<i>[j]);
}
}
// 矩阵转置
for(i=0;i<3;i++){
for(j=0;j<3;j++){
A[j][i]=temp[i][j];
}
}
}
//输入矩阵
void InputMatrix(int *A[3][3]){
int i,j;
printf("请输入一个3x3的矩阵(同行元素空格分格):\n");
for(i=0;i<3;i++){
scanf("%d %d %d",&A[i][0],&A[i][1],&A[i][2]);
printf("\n");
}
} |
|
|