精华内容
下载资源
问答
  • 2020常见编程题

    万次阅读 2020-08-26 13:25:58
  • 最新JAVA编程题全集 50题及答案

    千次下载 热门讨论 2014-10-11 19:17:28
    最新JAVA编程题全集 50题及答案
  • 面试编程题

    万次阅读 2019-06-06 23:37:24
    记录面试的编程题 二叉查找树的插入和查找 一个数二进制有多少个1 0-n二进制一共有多少个1

    记录面试的编程题

    1. 二叉查找树的插入和查找

    //二叉树定义
    class TreeNode {
        int val;
        TreeNode left = null;
        TreeNode right = null;
        TreeNode() {
        }
        TreeNode(int val) {
            this.val = val;
        }
    }
    
    public class FindAndInsertTree01 {
    	TreeNode root = null;
    	
    	//插入
    	public void insert(TreeNode node) {
    		if(root==null) {
    			root=node;
    		}else {
    			TreeNode current = root;
    			TreeNode parent = current;
    			while(true) {
    				parent=current;
    				if(current.val<node.val) {
    					current=current.left;
    					if(current==null) {
    						parent.left=node;
    						return;
    					}
    				}else {
    					current=current.left;
    					if(current==null) {
    						parent.right=node;
    						return;
    					}
    				}
    			}
    		}
    	}
    	
    	//查找
    	public TreeNode find(int value) {
    		TreeNode current=root;
    		while(current.val!=value) {
    			if(current.val<value) {
    				current=current.right;
    			}else if(current.val>value){
    				current=current.left;
    			}else {
    				return current;
    			}
    			if(current==null)return null;
    		}
    		return null;
    	}
    }
    

    2. 一个数二进制有多少个1

       public int NumberOf1(int n) {
        	int count=0;
        	if(n<0) {
        		count++;
        		n=n&0x7FFFFFFF;
        	}
        	while(n!=0) {
        		if(n%2!=0)count++;
        		n=n/2;
        	}
    		return count;
        }
    

    3. 0-n二进制一共有多少个1

    4. 二分查找

    	//非递归
    	public int binSearch(int arr[],int k) {
    		int low=0;
    		int high=arr.length-1;
    		while(low<high) {
    			int middle=(low+high)/2;
    			if(arr[middle]==k)return middle+1;
    			if(arr[middle]>k)high=middle-1;
    			else low=middle+1;
    		}
    		return -1;
    	}
    	
    	//递归
    	public int binSearch(int arr[],int k,int low,int high) {
    		if(low<high) {
    			int middle=(low+high)/2;
    			if(arr[middle]==k)return middle+1;
    			else if(arr[middle]>k)binSearch(arr,k,low,middle-1);
    			else binSearch(arr,k,middle+1,high);
    		}
    		return -1;
    	}
    

    5. 快速排序

    	public int[] quickSort(int arr[],int low,int high) {
    		if(low<high) {
    			int middle=getMiddle(arr,low,high);
    			quickSort(arr,0,middle-1);
    			quickSort(arr,middle+1,high);
    		}
    		return arr;
    	}
    	
    	private int getMiddle(int[] arr, int low, int high) {
    		int temp=arr[low];
    		while(low<high) {
    			while(low<high&&arr[high]>=temp) {
    				high--;
    			}
    			arr[low]=arr[high];
    			while(low<high&&arr[low]<=temp) {
    				low++;
    			}
    			arr[high]=temp;
    		}
    		return low;
    	}
    

    6. 反转链表

        public ListNode ReverseList(ListNode head) {
            ListNode next=null;
            ListNode pre=null;
            while(head!=null){
                next=head.next;
                head.next=pre;
                pre=head;
                head=next;
            }
            return pre;
        }
    

    7. 二叉树前序遍历

    	//递归
    	public List<Integer> postorder(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		postorder(root,result);
    		return result;
    	}
    	private void postorder(TreeNode root, List<Integer> result) {
    		if(root==null)return;
    		result.add(root.val);
    		postorder(root.left,result);
    		postorder(root.right,result);
    	}
    	
    	//非递归
    	public List<Integer> postorderF(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		Stack<TreeNode> s=new Stack<>();
    		Stack<TreeNode> temp=new Stack<>();
    		TreeNode cur=root;
    		while(!s.isEmpty()) {
    			cur=s.pop();
    			temp.add(cur);
    			if(cur.left!=null)s.push(cur.left);
    			if(cur.right!=null)s.push(cur.right);
    		}
            while (!temp.isEmpty()) {
                cur = temp.pop();
                result.add(cur.val);
            }
    		return result;
    	}
    

    8. 二叉树中序遍历

    	//递归
    	public List<Integer> inorder(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		inorder(root,result);
    		return result;
    	}
    	private void inorder(TreeNode root, List<Integer> result) {
    		if(root==null)return;
    		inorder(root.left,result);
    		result.add(root.val);
    		inorder(root.right,result);
    	}
    	
    	//非递归
    	public List<Integer> inorderF(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		Stack<TreeNode> s=new Stack<>();
    		s.push(root);
    		TreeNode cur=root;
    		while(cur != null ||!s.isEmpty()) {
    			while(cur!=null) {
    				s.push(cur.left);//添加根节点
    				cur=cur.left;//添加左子节点
    			}
    			cur=s.pop();// 当前栈顶已经是最底层的左节点了,取出栈顶元素,访问该节点
    			result.add(cur.val);
    			cur=cur.right;// 添加右节点
    		}
    		return result;
    	}
    

    9. 二叉树后序遍历

    	//递归
    	public List<Integer> postorder(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		postorder(root,result);
    		return result;
    	}
    	private void postorder(TreeNode root, List<Integer> result) {
    		if(root==null)return;
    		postorder(root.left,result);
    		postorder(root.right,result);
    		result.add(root.val);
    	}
    	
    	//非递归
    	public List<Integer> postorderF(TreeNode root) {
    		List<Integer> result=new ArrayList<>();
    		Stack<TreeNode> s=new Stack<>();
    		Stack<TreeNode> temp=new Stack<>();
    		TreeNode cur=root;
    		while(!s.isEmpty()) {
    			cur=s.pop();
    			temp.add(cur);
    			if(cur.left!=null)s.push(cur.left);
    			if(cur.right!=null)s.push(cur.right);
    		}
            while (!temp.isEmpty()) {
                cur = temp.pop();
                result.add(cur.val);
            }
    		return result;
    	}
    

    二叉树的遍历 https://segmentfault.com/a/1190000016674584#articleHeader10

    10. 合并排序的链表

    	public ListNode Merge(ListNode list1,ListNode list2) {
    		ListNode node=null;
    		ListNode head=node;
    		if(list1==null)return list2;
    		if(list2==null)return list1;
    		while(list1!=null&&list2!=null) {
    			if(list1.val<=list2.val) {
    				if(head==null) {
    					head=node=list1;
    				}else {
    					node.next=list1;
    					node=node.next;
    				}
    				list1=list1.next;
    			}else {
    				if(head==null) {
    					head=node=list2;
    				}else {
    					node.next=list2;
    					node=node.next;
    				}
    				list2=list2.next;
    			}
    		}
    		if(list1==null) {
    			node.next=list2;
    		}else if(list2==null){
    			node.next=list1;
    		}
    		return head;
    	}
    

    11.给一个数组和目标值,求数组中和为目标值的所有组合

         public int[] twoSum(int[] nums, int target) {
            Map<Integer,Integer> map=new HashMap<>();
            for(int i=0;i<nums.length;i++){
            	map.put(nums[i], i);
            }
            
            for(int i=0;i<nums.length;i++){
            	int value=target-nums[i];
            	if(map.containsKey(value)&&map.get(value)!=i){
            		return new int[]{i,map.get(value)};
            	}
            }
    		return null;
        }
    

    12.堆排序(最小K个数)

     public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        	ArrayList<Integer> list=new ArrayList<>();
        if(input.length<k||k==0)return list;	
         sort(input);
        	for(int i=0;i<k;i++) {
        		list.add(input[i]);
        	}
    		return list;
        }
    	public static void sort(int arr[]) {
    		int N=arr.length-1;
    		for(int i=N/2;i>=0;i--) {
    			sink(arr,i,N);
    		}
    		while(N>0) {
    			swap(arr,0,N--);
    			sink(arr,0,N);
    		}
    	}
    	
    	private static void sink(int[] arr, int i, int N) {
    		while(2*i+1<=N) {
    			int k=i*2+1;//左子树
    			if(k<N&&arr[k]<arr[k+1]) {
    				k++;//找到左右子树中较大的一个
    			}
    			if(arr[i]>arr[k])break;
    			swap(arr,i,k);
    			i=k;
    		}
    	}
    
    	private static void swap(int[] arr, int i, int k) {
    		int temp=arr[i];
    		arr[i]=arr[k];
    		arr[k]=temp;
    	}
    

    13.最长公共子串

    14.二叉树的深度

    展开全文
  • 100+Python编程题给你练(附答案)

    万次阅读 多人点赞 2019-03-31 16:28:08
    大家如果能坚持独立思考完成以下题目,一定可以帮大家轻松 get Python 的编程技能。目前,这个项目已经获得了 3994 Stars,2952 Forks。 Github 地址:Python-programming-exercises 首先,这 100+ 练习根据难易...

     

    大家如果能坚持独立思考完成以下题目,一定可以帮大家轻松 get Python 的编程技能。目前,这个项目已经获得了 3994 Stars,2952 Forks。

    Github 地址:Python-programming-exercises

    首先,这 100+ 练习题根据难易程度分为三个等级:Level 1、2 和 3。下面对如何定义这三个 Level 进行了说明,大家可以结合自身的学习能力和实践经验进行选择。

    其次,本编程题是基于Python3,每题都有问题描述、提示和解决方案。大家一定要先独立完成,然后再看参考答案哈~

    前 25 题中,Q1~5、22~25 都是 Level 1 的难度,Q6~17 为 Level 2,Q18~22 为 Level 3。大家正好利用这五道题学习、巩固一下基础,然后就开始准备挑战自己吧!

    1.    等级描述
    Level 1:初级。是指刚刚通过Python入门课程的人。他可以用1或2个Python类或函数来解决一些问题。通常,答案可以直接在教科书中找到。
    Level 2:中级。是指刚刚学习了Python,但是已经有了较强的编程背景的人。他应该能够解决可能涉及3或3个Python类或函数的问题。答案不能直接在课本上找到。
    Level 3:高级。。他应该使用Python来解决更复杂的问题,使用更丰富的库函数、数据结构和算法。他应该使用几个Python标准包和高级技术来解决这个问题。
    2.    问题的模板
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    问题
    提示
    解决方案
    3.问题

    前 25 题中,Q1~5、22~25 都是 Level 1 的难度,Q6~17 为 Level 2,Q18~22 为 Level 3。

    100+Python编程题

    题1
    1级
    问题:编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。
    提示:考虑使用range(#begin, #end)方法

    解决方案:

    l=[]
    for i in range(2000, 3201):
        if (i%7==0) and (i%5!=0):
            l.append(str(i))
    
    print (','.join(l))

    题2
    1级
    问题:编写一个可以计算给定数的阶乘的程序。结果应该以逗号分隔的顺序打印在一行上。假设向程序提供以下输入:8
    则输出为:40320
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。
    解决方案:

    def fact(x):
        if x == 0:
            return 1
        return x * fact(x - 1)
    print('请输入一个数字:')
    x=int(input())
    print (fact(x))

    题3
    1级
    问题:使用给定的整数n,编写一个程序生成一个包含(i, i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。
    假设向程序提供以下输入:8
    则输出为:
    {1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64}
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()
    解决方案:

    print('请输入一个数字:')
    n=int(input())
    d=dict()
    for i in range(1,n+1):
        d[i]=i*i
    
    print(d)

    题4
    1级
    问题:编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入:
    34岁,67年,55岁,33岁,12日,98年
    则输出为:['34', '67', '55', '33', '12', '98']
                   ('34', '67', '55', '33', '12', '98')
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。方法可以将列表转换为元组
    解决方案:

    import re
    print('请输入一组数字:')
    values=input()
    l=values.split(",")
    k=re.findall(r'[0-9]+',values)
    t=tuple(k)
    print (k)
    print (t)

    题5
    1级
    问题:定义一个至少有两个方法的类:        getString:从控制台输入获取字符串        printString::打印大写母的字符串。
    还请包含简单的测试函数来测试类方法。
    提示:使用_init__方法构造一些参数
    解决方案:

    class InputOutString(object):
        def __init__(self):
            self.s = ""
    
        def getString(self):
            print('请输入字符串:')
            self.s = input()
    
        def printString(self):
            print (self.s.upper())
    
    strObj = InputOutString()
    strObj.getString()
    strObj.printString()

    题6
    2级
    问题:
    编写一个程序,根据给定的公式计算并打印值:Q=\sqrt{[(2*C*D)/H]}。以下是C和H的固定值:C是50。H是30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。
    例子假设程序的输入序列是逗号分隔的:100,150,180,
    程序输出为:18,22,24
    提示:如果接收到的输出是小数,则应四舍五入到其最近的值(例如,如果接收到的输出是26.0,则应打印为26)。在为问题提供输入数据的情况下,应该假设它是控制台输入。
    解决方案:

    #!/usr/bin/env python
    import math
    c=50
    h=30
    value = []
    print('请输入一组数字:')
    items=[x for x in input().split(',')]
    for d in items:
        value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))
    
    print (','.join(value))

    题7
    2级
    问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。
    注意:i= 0,1 . .,X - 1;    j = 0, 1,­Y-1。
    例子假设程序有以下输入:3、5
    则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]]
    提示:注意:如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。
    解决方案:

    print('请输入两个数字:')
    input_str = input()
    dimensions=[int(x) for x in input_str.split(',')]
    rowNum=dimensions[0]
    colNum=dimensions[1]
    multilist = [[0 for col in range(colNum)] for row in range(rowNum)]
    
    for row in range(rowNum):
        for col in range(colNum):
            multilist[row][col]= row*col
    
    print (multilist)

    题8
    2级
    问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:
    without,hello,bag,world
    则输出为:
    bag,hello,without,world
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。
    解决方案:

    items=[x for x in input().split(',')]
    items.sort()
    print (','.join(items))
    

    题9
    2级
    问题:编写一个程序,接受一行序列作为输入,并在将句子中的所有字符大写后打印行。
    假设向程序提供以下输入:
    Hello world
    Practice makes perfect
    则输出为:
    HELLO WORLD
    PRACTICE MAKES PERFECT
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。
    解决方案:

    lines = []
    while True:
        s = input()
        if s:
            lines.append(s.upper())
        else:
            break;
    
    for sentence in lines:
        print(sentence)

    题10
    2级
    问题:编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印这些单词。
    假设向程序提供以下输入:
    hello world and practice makes perfect and hello world again
    则输出为:
    again and hello makes perfect practice world
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。
    我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序。
    解决方案:

    print('请输入一组字符串:')
    s = input()
    words = [word for word in s.split(" ")]
    print (" ".join(sorted(list(set(words)))))

    题11
    2级

    问题:编写一个程序,接受一系列逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除。 可被5整除的数字将以逗号分隔的顺序打印。
    例:
    0100,0011,1010,1001
    那么输出应该是:
    1010
    注意:假设数据由控制台输入。

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    value = []
    print('请输入逗号分隔的4位二进制数:')
    items=[x for x in input().split(',')]
    for p in items:
        intp = int(p, 2)
        # print(intp)
        if not intp%5:
            value.append(p)
    
    print (','.join(value))

    题12
    2级

    题:编写一个程序,它将找到1000到3000之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。
    获得的数字应以逗号分隔的顺序打印在一行上。

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。
    解:

    values = []
    for i in range(1000, 3001):
        s = str(i)
        if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):
            values.append(s)
    print (",".join(values))

    题13
    2级

    题:编写一个接受句子并计算字母和数字的程序。假设为程序提供了以下输入:
    Hello world! 123
    然后,输出应该是:
    字母10
    数字3

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    print('请输入:')
    s = input()
    d={"DIGITS":0, "LETTERS":0}
    for c in s:
        if c.isdigit():
            d["DIGITS"]+=1
        elif c.isalpha():
            d["LETTERS"]+=1
        else:
            pass
    print ("LETTERS", d["LETTERS"])
    print ("DIGITS", d["DIGITS"])

    题14
    2级

    题:编写一个接受句子的程序,并计算大写字母和小写字母的数量。
    假设为程序提供了以下输入:
    Hello world!
    然后,输出应该是:
    大写实例 1
    小写实例 9

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    print('请输入:')
    s = input()
    d={"UPPER CASE":0, "LOWER CASE":0}
    for c in s:
        if c.isupper():
            d["UPPER CASE"]+=1
        elif c.islower():
            d["LOWER CASE"]+=1
        else:
            pass
    print ("UPPER CASE", d["UPPER CASE"])
    print ("LOWER CASE", d["LOWER CASE"])

    题15
    2级

    题:编写一个程序,计算a + aa + aaa + aaaa的值,给定的数字作为a的值。假设为程序提供了以下输入:
    9     然后,输出应该是: 11106

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    print('请输入一个数字:')
    a = input()
    n1 = int( "%s" % a )
    n2 = int( "%s%s" % (a,a) )
    n3 = int( "%s%s%s" % (a,a,a) )
    n4 = int( "%s%s%s%s" % (a,a,a,a) )
    print (n1+n2+n3+n4)

    题16
    2级

    题:使用列表推导来对列表中的每个奇数。 该列表由一系列逗号分隔的数字输入。
    假设为程序提供了以下输入:
    1,2,3,4,5,6,7,8,9
    然后,输出应该是:
    1,3,5,7,9

    解:

    print("输入:")
    values = input()
    numbers = [x for x in values.split(",") if int(x)%2!=0]
    print (",".join(numbers))

    题17
    2级

    题:编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。 事务日志格式如下所示:
    D 100
    W 200

    D表示存款,而W表示提款。
    假设为程序提供了以下输入:
    D 300
    D 300
    W 200
    D 100
    然后,输出应该是:
    500

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    netAmount = 0
    while True:
        print("请输入:")
        s = input()
        if not s:
            break
        values = s.split(" ")
        operation = values[0]
        amount = int(values[1])
        if operation=="D":
            netAmount+=amount
        elif operation=="W":
            netAmount-=amount
        else:
            pass
    print (netAmount)

    题18
    3级

    题:网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码的有效性。
    以下是检查密码的标准:
    1. [a-z]之间至少有1个字母
    2. [0-9]之间至少有1个数字
    1. [A-Z]之间至少有一个字母
    3. [$#@]中至少有1个字符
    4.最短交易密码长度:6
    5.交易密码的最大长度:12
    您的程序应接受一系列逗号分隔的密码,并将根据上述标准进行检查。将打印符合条件的密码,每个密码用逗号分隔。
    例:如果以下密码作为程序的输入:

    ABd1234@1,a F1#,2w3E*,2We3345
    然后,程序的输出应该是:

    ABd1234 @ 1

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    解:

    import re
    value = []
    print("请输入:")
    items=[x for x in input().split(',')]
    for p in items:
        if len(p)<6 or len(p)>12:
            continue
        else:
            pass
        if not re.search("[a-z]",p):
            continue
        elif not re.search("[0-9]",p):
            continue
        elif not re.search("[A-Z]",p):
            continue
        elif not re.search("[$#@]",p):
            continue
        elif re.search("\s",p):
            continue
        else:
            pass
        value.append(p)
    print (",".join(value))

    题19
    3级

    题:您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字。 元组由控制台输入。 排序标准是:
    1:根据名称排序;
    2:然后根据年龄排序;
    3:然后按分数排序。
    优先级是name> age>得分。
    如果给出以下元组作为程序的输入:
    Tom,19,80
    John,20,90
    Jony,17,91
    Jony,17,93
    Json,21,85
    然后,程序的输出应该是:
    [('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21 ','85'),('Tom','19','80')]

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。我们使用itemgetter来启用多个排序键。

    解:

    from operator import itemgetter, attrgetter
    
    l = []
    print("请输入:")
    while True:
    
        s = input()
        if not s:
            break
        l.append(tuple(s.split(",")))
    
    print (sorted(l, key=itemgetter(0,1,2)))

    题20
    3级

    题:使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

    提示:考虑使用yield。

    解:

    def putNumbers(n):
        i = 0
        while i<n:
            j=i
            i=i+1
            if j%7==0:
                yield j
    
    for i in putNumbers(100):
        print (i)

    题21
    3级
    机器人从原点(0,0)开始在平面中移动。 机器人可以通过给定的步骤向上,向下,向左和向右移动。 机器人运动的痕迹如下所示:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    方向之后的数字是步骤。 请编写一个程序来计算一系列运动和原点之后距当前位置的距离。如果距离是浮点数,则只打印最接近的整数。
    例:如果给出以下元组作为程序的输入:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    然后,程序的输出应该是:2
    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    import math
    pos = [0,0]
    print("请输入:")
    while True:
        s = input()
        if not s:
            break
        movement = s.split(" ")
        direction = movement[0]
        steps = int(movement[1])
        if direction=="UP":
            pos[0]+=steps
        elif direction=="DOWN":
            pos[0]-=steps
        elif direction=="LEFT":
            pos[1]-=steps
        elif direction=="RIGHT":
            pos[1]+=steps
        else:
            pass
    
    print (int(round(math.sqrt(pos[1]**2+pos[0]**2))))

    题22
    3级

    题:编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。
    假设为程序提供了以下输入:

    New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

    然后,输出应该是:

    2:2
    3.:1
    3?:1
    New:1
    Python:5
    Read:1
    and:1
    between:1
    choosing:1
    or:2
    to:1

    提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

    freq = {}   # frequency of words in text
    print("请输入:")
    line = input()
    for word in line.split():
        freq[word] = freq.get(word,0)+1
    words = sorted(freq.keys())  #按key值对字典排序
    
    for w in words:
        print ("%s:%d" % (w,freq[w]))

    题23
    1级

    题:写一个可以计算数字平方值的方法

    提示: 使用**运算符

    def square(num):
        return num ** 2
    
    print (square(2))
    print (square(3))

    题24
    1级

    题:Python有许多内置函数,如果您不知道如何使用它,您可以在线阅读文档或查找一些书籍。 但是Python为每个内置函数都有一个内置的文档函数。
         请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),raw_input()
         并为您自己的功能添加文档
        
    提示:内置文档方法是__doc__

    print(abs.__doc__)
    print(int.__doc__)
    print(input.__doc__)
    
    def square(num):
        '''Return the square value of the input number.
    
        The input number must be integer.
        '''
        return num ** 2
    
    print(square(2))
    print(square.__doc__)

    题25
    1级

    题:定义一个类,它具有类参数并具有相同的实例参数。

    提示:定义一个实例参数,需要在__init__方法中添加它。您可以使用构造参数初始化对象,也可以稍后设置该值

    class Person:
        # Define the class parameter "name"
        name = "Person"
    
        def __init__(self, name=None):
            # self.name is the instance parameter
            self.name = name
    
    jeffrey = Person("Jeffrey")
    print("%s name is %s" % (Person.name, jeffrey.name))
    
    nico = Person()
    nico.name = "Nico"
    print("%s name is %s" % (Person.name, nico.name))

     

    Python入门、提高学习网站链接:https://github.com/jackfrued/Python-100-Days?utm_source=wechat_session&utm_medium=social&utm_oi=931473721877651456

    刷Leetcode网站力扣https://leetcode-cn.com/problemset/all/

    Python进阶https://docs.pythontab.com/interpy/

    菜鸟教程:https://www.runoob.com/python/python-100-examples.html

    未完待续……

    展开全文
  • Python123 C编程题答案解析

    千次阅读 多人点赞 2020-11-29 21:57:41
    Python123编程题答案解析 大学计算机Python123编程题答案解析C(python123)顺序结构选择结构循环结构循环进阶 C(python123) 顺序结构 选择结构 循环结构

    Python123 C编程题答案解析(不定期更新) 不要直接复制,请尝试理解,不懂可以问,发评论区也行,看完点个赞呗

    请自行先按https://blog.csdn.net/weixin_43593986/article/details/110384759排除错误
    避免遇到错误就手足无措的情况

    C(python123)

    1、顺序结构

    1、求三角形面积

    描述
    假设三角形的三条边长为a,b和c,从键盘输入三条边的边长(要求在一条scanf()中输入3个值,中间用逗号分隔),求三角形的面积area,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    输出保留两位小数
    在这里插入图片描述

    #include <stdio.h>
    #include<math.h>
    int main()
    {
    	float a, b, c,s,area;
    	scanf("%f,%f,%f", &a, &b, &c);
    	s = 0.5*(a + b + c);
    	area = sqrt(s*(s - a)*(s - b)*(s - c));
    	printf("area=%.2f", area);
    	return 0;
    }
    

    2、计算球的体积

    根据输入的半径值,计算球的体积。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    描述
    通过键盘输入球的半径,计算球体积,结果保留3位小数;
    球体积计算公式:在这里插入图片描述
    其中,定义PI=3.1415;

    #include <stdio.h>
    int main()
    {
    	float v, r, pi=3.1415;
    	scanf("%f", &r);
    	v = (4 * pi*r*r*r) / 3;		//注意4/3=1,所以不能先写4/3
    	printf("%.3f", v);
    	return 0;
    }
    

    3、计算圆的周长和面积

    描述
    输入圆1和圆2的半径(实数类型),按指定格式输出圆1和圆2的周长与面积。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    公式中圆周率取3.141592‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    d1后面两个空格is后面3个空格,其余雷同

    #include <stdio.h>
    int main()
    {
    	float r1, r2,d1,d2,s1,s2,pi=3.141592;
    	scanf("%f%f", &r1, &r2);
    	d1 = pi * 2 * r1;
    	d2 = pi * 2 * r2;
    	s1 = pi * r1 * r1;
    	s2 = pi * r2 * r2;
    	printf("d1  is   %f\n",d1);			//题目要求空格前2后3
    	printf("d2  is   %f\n",d2);
    	printf("s1  is   %f\n", s1);
    	printf("s2  is   %f", s2);
    	return 0;
    }
    

    4、整数拆解组合

    问题描述:
    编程实现通过键盘输入两个两位数的正整数放入变量a和变量b中,拆解量a和变量b中的数,然后合并形成一个新的整数放在变量c中。合并的方式是:将变量a中数的十位和个位数依次放在变量c中数的千位和十位上,变量b中数的十位和个位数依次放在变量c数的个位和百位上。例如,当a中是45,b中是12,那么c中是4251。

    #include<stdio.h>
    int main()
    {
    	char a,b,c,d;		//定义4个变量表示两个数的十位和个位
    	a=getchar();
    	b=getchar();
    	getchar();			//getchar吃掉中间的空格
    	c=getchar();
    	d=getchar();
    	printf("c is %c%c%c%c",a,d,b,c);	//按要求顺序输出
    	return 0;
    }
    

    2、选择结构

    1、判断是否3的倍数

    问题描述:编程实现,若输入的整数是3的倍数,则显示 “OK!”(其中OK为大写字母,且双引号不输出);
    若输入的整数不是3的倍数,则没有任何结果显示。

    #include <stdio.h>
    int main()
    {
    	int a;
    	scanf("%d", &a);
    	a % 3 == 0 ? printf("OK!") : a;
    	return 0;
    }
    

    2、几位数

    描述
    编写一个程序,输入一个整数(0-9999之间),请输出它的位数

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char a[10] = { '\0'	};
    	gets(a);
    	printf("%d", strlen(a));
    	return 0;
    }
    

    3、大写转小写

    描述
    输入一个大写字母,输出相应的小写字母‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    提示:字符型输入输出使用格式控制字符:%c

    #include<stdio.h>
    int main()
    {
    	char ch;
    	ch=getchar();
    	ch = ch + 32;
    	printf("%c", ch);
    	return 0;
    }
    

    4、求三角形面积 (加判断)

    描述
    假设三角形的三条边长为a,b和c,从键盘输入三条边的边长(要求在一条scanf()中输入3个值,输入时用空格分隔),先判断这三条边是否能构成三角形,如果能则求三角形的面积area并输出,保留两位小数,否则输出 Error!。
    在这里插入图片描述

    #include <stdio.h>
    #include<math.h>
    int main()
    {
    	float a, b, c,s,area;
    	scanf("%f %f %f", &a, &b, &c);
    	if(a+b>c && b+c>a && a+c>b)
    	{
        	s = 0.5*(a + b + c);
        	area = sqrt(s*(s - a)*(s - b)*(s - c));
            printf("%.2f", area); 
    	}
    	else
    	{
    	    printf("Error!");
    	}
    	return 0;
    }
    

    5、空气质量状况判定

    描述
    下表是我国空气质量分级表,请编写程序,由用户输入空气污染指数API值,输出相应的空气质量状况
    在这里插入图片描述

    #include<stdio.h>
    
    int main()
    {
    	int API = 0;
    	scanf("%d", &API);
    	if (API >= 0 && API <= 50)
    	{
    		printf("优");
    		return 0;
    	}
    	else if (API >= 51 && API <= 100)
    	{
    		printf("良");
    		return 0;
    	}
    	else if (API >= 11 && API <= 150)
    	{
    		printf("轻微污染");
    		return 0;
    	}
    	else if (API >=151 && API <=200)
    	{
    		printf("轻度污染");
    		return 0;
    	}
    	else if (API >=201 && API <= 250)
    	{
    		printf("中度污染");
    		return 0;
    	}
    	else if (API >= 250 && API <=300)
    	{
    		printf("中度重污染");
    		return 0;
    	}
    	else if(API >=301)
    	{
    		printf("重污染");
    		return 0;
    	}
    	else
    	{
    		printf("输入错误");
    		return 0;
    	}
    	
    }
    

    6、大小写转换

    描述
    输入一个字母,先进行判断,如果是小写则转换成大写,反之则转换成小写,并输出‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    提示:字符型输入输出使用格式控制字符:%c,或者用getchar()和putchar()函数

    #include<stdio.h>
    int main()
    {
        char c;
        c=getchar();
        if(c<'a')
        {
            c+=32;
        }
        else
        {
            c-=32;
        }
        putchar(c);
        return 0;
    }
    

    7、编程输入年份和月份,输出每个月的天数

    编程输入年份和月份,输出每个月的天数(其中闰年二月就输出29天,平年二月输出28天)。如果输入的月份超出12,就输出 Input error!

    #include <stdio.h>
    int main()
    {
    	int year, a,month;
    	scanf("%d%d", &year,&month);
    	if (year % 400 == 0)
    		a = 1;
    	else
    	{
    		if (year % 4 == 0 && year % 100 != 0)
    			a = 1;
    		else
    			a = 0;
    	}
    	switch (month)
    	{
    	case 1:
    	case 3:
    	case 5:
    	case 7:
    	case 8:
    	case 10:
    	case 12:
    		printf("31");
    		break;
    	case 4:
    	case 6:
    	case 9:
    	case 11:
    		printf("30");
    		break;
    	case 2:
    		if (a == 1)
    		{
    			printf("29");
    		}
    		else
    		{
    			printf("28");
    		}
    		break;
    	default:
    		printf("Input error!");
    		break;
    	}
    	return 0;
    }
    

    8、5位的回文数

    #0035003500360033003000311606745210169
    回文数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    输入一个5位数,判断它是不是回文数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    输入12321 输出YES‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    输入12345输出NO

    #include <stdio.h>
    int main()
    {
    	char a[6] = { '\0' };
    	gets(a);
    	(a[0] == a[4] && a[1] == a[3]) ? printf("YES") : printf("NO");
    	return 0;
    }
    

    9、字符类型判断

    描述
    题目内容: ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    从键盘键入任意一个字符,判断该字符是英文字母(不区分大、小写)、数字字符还是其它字符。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    若键入字母,则屏幕显示 It is an English character.;若键入数字则屏幕显示It is a digit character. ;若输入其它字符,则屏幕显示:It is other character.

    #include <stdio.h>
    int main()
    {
    	char c;
    	c = getchar();
    	if (c >= 'A' && c <= 'z')
    	{
    		printf("It is an English character.");
    	}
    	else if (c >= '0' && c <= '9')
    	{
    		printf("It is a digit character.");
    	}
    	else
    	{
    		printf("It is other character.");
    	}
    	return 0;
    }
    

    10、求一元二次方程的根

    描述
    ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬在这里插入图片描述
    注意:a、b、c三个变量由一条输入语句输入,中间用逗号分隔,先判断是否有实根,如果有则计算并输出,否则输出:No Real Root!‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    在这里插入图片描述

    #include <stdio.h>
    #include<math.h>
    int main()
    {
    	float a, b, c,x1,x2;
    	scanf("%f,%f,%f", &a, &b, &c);
    	if (b*b > 4 * a *c)
    	{
    		x1 = (-b + sqrt(b*b - 4 * a *c))/(2*a);
    		x2 = (-b - sqrt(b*b - 4 * a *c)) / (2 * a);
    		printf("x1=%.2f\nx2=%.2f", x1, x2);
    	}
    	else if (b*b == 4 * a *c)
    	{
    		x1 = -b / (2 * a);
    		x2 = x1;
    		printf("x1=%.2f\nx2=%.2f", x1, x2);
    	}
    	else
    	{
    		printf("No Real Root!");
    	}
    	return 0;
    }
    

    11、输入三个整数,排序后输出

    要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    通过键盘输入三个整数(在键盘上输入这三个数时用空格间隔),利用简单形式if语句设计算法,将这三个数按照从小到大顺序排序后输出。(输出时,这三个数中间用空格间隔)

    #include<stdio.h>
    int main()
    {
    	int a, b, c,t,max,min,middle=0;
    	scanf("%d%d%d", &a, &b, &c);
    	max = a; min = a;
    	if (max < b)
    		max = b;
    	if (max < c)
    		max = c;
    	if (min > b)
    		min = b;
    	if (min > c)
    		min = c;
    	if (a > min && a < max)
    		middle = a;
    	if (b > min && b < max)
    		middle = b;
    	if (c > min && c < max)
    		middle = c;
    	printf("%d %d %d", min,middle, max);
    	return 0;
    }
    

    12、求解简单的四则运算(switch)

    [问题描述]利用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入表达式包括:两个操作数(double类型)和一个运算符;然后依据指定运算符包括加(+)、减(-)、乘(*)、除(/),计算四则运算的结果。
    说明:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    1、可以包含+、-、*和/四种运算,如果用户输入其它运算符,输出:“DataError!”,当用户输入除法算式时,先判断除数是否为零,不为零输出计算结果,为零输出“DataError!”

    #include <stdio.h>
    #include<math.h>
    int main()
    {
    	double a, b, result;
    	char c;
    	scanf("%lf%c%lf",&a,&c,&b);
    	switch (c)
    	{
    	case '+':
    		result = a + b;
    		break;
    	case '-':
    		result = a - b;
    		break;
    	case '*':
    		result = a * b;
    		break;
    	case '/':
    		if (b !=0)
    		{
    			result = a / b;
    		}
    		else
    		{
    			printf("DataError!");
    			return 0;
    		}
    		break;
    	default:
    		printf("DataError!");
    		return 0;
    	}
    	printf("%.2lf", result);
    	return 0;
    }
    

    13、简单的猜数游戏

    描述
    事先由计算机指定一个正整数,computer_num=65,然后让用户猜,如果用户输入等于此数,输出“Right”,如果大于此数,输出“Big”,小于输出“Small”

    #include <stdio.h>
    #include<math.h>
    int main()
    {
    	int n;
    	scanf("%d", &n);
    	if (n > 65)
    	{
    		printf("Big");
    	}
    	else if(n == 65)
    	{
    		printf("Right");
    	}
    	else
    	{
    		printf("Small");
    	}
    	return 0;
    }
    

    14、温度自动转换

    输入一个温度,用C或者F结尾,如果是C结尾,则将温度转换为华氏温度,如果是F结尾,则将温度转换为摄氏温度,结果保留2为小数,如果结尾是其他字符,输入“Error!”。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    华氏温度转摄氏温度 公式为 C=5(F-32)/9 ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    摄氏温度转华氏温度 公式为 F=C*1.8+32

    #include<stdio.h>
    
    int main()
    {
    	char ch;
    	float C=0, F=0,t=0;
    	scanf("%f%c", &t, &ch);
    
    	if (ch == 'C')
    	{
    		F = t * 1.8 + 32;
    		printf("%.2fF", F);
    	}
    	else if(ch == 'F')
    	{
    		C = 5*(t - 32) / 9;
    		printf("%.2fC", C);
    	}
    	else
    	{
    		printf("Error!");
    	}
    	return 0;
    }
    

    15、第几天

    编写一道程序,输入三个正整数,表示某年某月某日,判断这一天是这一年的第几天?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    输入2013 7 12 输出193‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    输入2012 5 15 输出136

    #include <stdio.h>
    int getdays(int year, int month);
    int main()
    {
    	int sum=0, day, year, month,i;
    	scanf("%d %d %d", &year, &month, &day);
    	for (i = 1; i < month; i++)				//循环到前一个月
    	{
    		sum = sum + getdays(year, i);
    	}
    	sum = sum + day;						//加上本月天数
    	printf("%d", sum);
    	return 0;
    }
    int getdays(int year, int month)			//根据年月返回对应天数
    {
    	int a,day;
    	if (year % 400 == 0)
    		a = 1;
    	else
    	{
    		if (year % 4 == 0 && year % 100 != 0)
    			a = 1;
    		else
    			a = 0;
    	}
    	switch (month)
    	{
    	case 1:
    	case 3:
    	case 5:
    	case 7:
    	case 8:
    	case 10:
    	case 12:
    		day = 31;
    		break;
    	case 4:
    	case 6:
    	case 9:
    	case 11:
    		day = 30;
    		break;
    	case 2:
    		if (a == 1)
    		{
    			day = 29;
    		}
    		else
    		{
    			day = 28;
    		}
    		break;
    	default:
    		printf("Input error!");
    		break;
    	}
    	return day;
    }
    

    16、中英文数字

    描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    输入一个两位数,输出该数的英文单词

    #include<stdio.h>
    
    int main()
    {
    	int num = 0,a,b;
    	scanf("%d", &num);
    	if (num >= 10 && num <=19)
    	{
    		switch (num)
    		{
    		case 10:
    			printf("ten");
    			break;
    		case 11:
    			printf("eleven");
    			break;
    		case 12:
    			printf("twelve");
    			break;
    		case 13:
    			printf("thirteen");
    			break;
    		case 14:
    			printf("fourteen");
    			break;
    		case 15:
    			printf("fifteen");
    			break;
    		case 16:
    			printf("sixteen");
    			break;
    		case 17:
    			printf("seventeen");
    			break;
    		case 18:
    			printf("eightteen");
    			break;
    		case 19:
    			printf("nineteen");
    			break;
    		}
    	}
    	else
    	{
    		a = num / 10;
    		b = num - a*10;
    		switch (a)
    		{
    		case 2:
    			printf("twenty");
    			break;
    		case 3:
    			printf("thirty");
    			break;
    		case 4:
    			printf("forty");
    			break;
    		case 5:
    			printf("fifty");
    			break;
    		case 6:
    			printf("sixty");
    			break;
    		case 7:
    			printf("seventy");
    			break;
    		case 8:
    			printf("eighty");
    			break;
    		case 9:
    			printf("ninety");
    			break;
    		}
    		switch (b)
    		{
    		case 0:
    			break;
    		case 1:
    			printf("-one");
    			break;
    		case 2:
    			printf("-two");
    			break;
    		case 3:
    			printf("-three");
    			break;
    		case 4:
    			printf("-four");
    			break;
    		case 5:
    			printf("-five");
    			break;
    		case 6:
    			printf("-six");
    			break;
    		case 7:
    			printf("-seven");
    			break;
    		case 8:
    			printf("-eight");
    			break;
    		case 9:
    			printf("-nine");
    			break;
    		}
    	}
    	return 0;
    }
    

    3、简单循环结构

    1、几位数

    [问题描述]输入一个整数,判断是几位数?

    #include <stdio.h>
    int  main()
    {
    	int count = 0;				//计数,必须初始化为0
    	int num = 0;				//输入的数
    	scanf("%d", &num);			//不能漏掉&
    	while (num != 0)			//循环整除10直到为0
    	{							//每次整除10后原数位数会减一
    		num /= 10;				//1位数整除10=0
    		count++;				//通过整除次数可知原数位数
    	}
    	printf("%d", count);		
    	return 0;
    }
    

    2-1、输出n位整数的后n-1位数

    方法一

    #include<stdio.h>
    #include<math.h>
    int  main()
    {
    	unsigned int w;			
    	int count = 0;								//count计数
    	int w1,high;								//w1作为w的副本,high表示w最高位的数字
    	scanf("%d", &w);
    	w1 = w;
    	while (w1 != 0)								//判断位数
    	{											//原理每次整除10位数会减一
    		w1 /= 10;								//判断整除次数即可判断位数
    		count++;
    	}
    	high = w / (pow(10.0, 1.0*count - 1));		//w整除10的(位数-1)次方即是最高位数字
    	w = w - high * (pow(10.0, 1.0*count-1));	//w减去(最高位数字乘10的(位数-1)次方)就是剩下的数
    	printf("%d", w);
    	return 0;
    }
    

    2-2、输出n位整数的后n-1位数

    [问题]
    w是一个大于10的无符号整数,若w是n(n≥2)位的整数,输出w的后n-1位的数。例如w 值为5923,则输出923;w的值为923,则输出23。无符号整型变量w定义为:unsigned int w; 无符号整型变量对应的格式符为%u 。
    方法二

    #include<stdio.h>
    int main()
    {
    	unsigned int w;
    	char c;
    	scanf("%c%u",&c,&w);						//通过%c取出第一位,其余位作为整数赋值给w
    	printf("%u",w);
    	return 0;
    }
    

    3、判断[a,b]间有多少个闰年

    描述
    请判断【a,b】年之间(含a年,含b年),共包含多少个闰年,要求输出闰年的个数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    闰年的判断条件:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    能被4整除但不能被100整除,或者能被400整除。

    #include <stdio.h>
    int  main()
    {
    	int a, b,i,count=0;
    	scanf("%d,%d", &a, &b);
    	for ( i = a; i <= b; i++)
    	{
    		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
    		{
    			count++;
    		}
    	}
    	printf("%d", count);
    	return 0;
    }
    

    4、求出1到1000之内能被7或者11整除、但不能同时被7和11整除的所 有整数的个数

    #include<stdio.h>
    int main()
    {
        int i,count=0;
        for(i=7;i<=994;i++)
        {
    
    if((i%7==0 ||i%11==0) && !(i %7==0 && i % 11==0))
       count++;
       
        }
        printf("%d",count);
        return 0;
    }
    

    5、输出三位数中所有的水仙花数

    描述
    题目内容:请输出【a,b】之间(含a,含b)所有水仙花数,水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int num,gw,sw,bw,result;			//bw表示百位....
    	int a,b;
    	scanf("%d,%d",&a,&b);
    	for (num = a; num <= b; num++)
    	{
    		bw = num / 100;	
    		sw = (num - bw * 100) / 10;
    		gw = num % 10;
    		result = pow(bw, 3) + pow(sw, 3) + pow(gw, 3);
    		if(result==num)
    		printf("%d\n", num);
    	}
    	return 0;
    }
    

    6、鸡兔同笼问题

    		见循环进阶部分
    

    7、猴子吃桃

    [问题描述]‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

    #include<stdio.h>
    int main()
    {
    	int n,num=1,i;
    	scanf("%d", &n);
    	for (i = 1; i < n; i++)
    	{
    		num = (num + 1) * 2;
    	}
    	printf("%d", num);
    	return 0;
    }
    

    8、求Sn=1!+2!+3!+4!+5!+…+n!的值

    #include<stdio.h>
    long int jiecheng(int i);
    int main()
    {
    	int n,i;
    	float sum = 0;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + jiecheng(i);
    	}
    	printf("%f", sum);
    	return 0;
    }
    long int jiecheng(int i)
    {
    	int sum=1;
    	for (i; i >= 1; i--)
    	{
    		sum = sum * i;
    	}
    	return sum;
    }
    

    9、组合数的问题

    [问题]
    根据以下公式求P的值。m与n为两个正数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    #include<stdio.h>
    int jiecheng(int i);
    int main()
    {
    	int n,i,m;
    	float p;
    	scanf("%d%d", &m,&n);
    	p = 1.0*jiecheng(m) / (jiecheng(n)*jiecheng(m-n));
    	printf("%f", p);
    	return 0;
    }
    int jiecheng(int i)
    {
    	int sum=1;
    	for (i; i >= 1; i--)
    	{
    		sum = sum * i;
    	}
    	return sum;
    }
    

    10、计算自然常数e的近似值

    编写程序,用e≈1+1/1!+1/2!+1/3!+……+1/n!,求e的近似值,n由用户输入。 输出e的值,保留10位小数。 由于int类型的最大值有限,建议使用long int,更准确表示13以上的阶乘数。

    #include<stdio.h>
    long int jiecheng(int i);
    int main()
    {
    	int n,i,m;
    	double e=1;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		e = e + (1.0/jiecheng(i));
    	}
    	printf("%.10lf", e);
    	return 0;
    }
    long int jiecheng(int i)
    {
    	long int sum=1;
    	for (i; i >= 1; i--)
    	{
    		sum = sum * i;
    	}
    	return sum;
    }
    

    11、 用格雷格列公式求pi的近似值

    用格雷格里公式求pi的近似值,当某一项的绝对值小于10的-6次方时停止

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int i=1,j=1;
    	double x,pi=0;
    	do
    	{
    		x = 1.0 / i;
    		if (j % 2 == 0)
    		{
    			x = -x;
    		}
    		pi = pi + x;
    		i += 2;
    		j++;
    	} while (fabs(x) >= 1e-6);      //fabs为取绝对值
    	pi = pi - x;
    	pi *= 4;
    	printf("%lf", pi);
    	return 0;
    }
    

    12、输出Fibonacci数列小于等于n的项

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    编程序输出Fibonacci(斐波那契)数列小于等于n的项,n由用户指定

    #include<stdio.h>
    int  main()
    {
    	int a, b, c=0, d,n;
    	scanf("%d", &n);
    	a = 1; b = 1;
    	printf("1 1");
    	for (;;)
    	{
    		
    		c = a + b;
    		d = b + c;
    		a = c;
    		b = d;
    		if (a <= n)
    			printf(" %d", a);
    		if (b <= n)
    			printf(" %d", b);
    		if (a > n || b > n)
    			break;
    	}
    	printf(" ");
    	return 0;
    }
    

    13、累加求和 a+aa+aaa+aa…a

    [试题描述]
    下面程序的功能是求a+aa+aaa+aa…a(n个a)之和,a和n从键盘输入。例如输入2和3,则计算2+22+222,输出246。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    [输入说明] a和n的值,类型可以选择 整型或 浮点型;
    [输出说明] 累加求和输出的结果建议定义为double类型(结果保留 0位小数);

    #include<stdio.h>
    #include<math.h>
    int  main()
    {
    	int n, a,i,b,sum=0;
    	scanf("%d%d", &a, &n);
    	b = a;
    	for (i = 1; i < n; i++)
    	{
    		a = a + b * (pow(10, i));
    		sum += a;
    	}
    	printf("%d", sum+b);
    	return 0;
    }
    

    14、0.5次方累加和问题

    [描述]计算并输出以下公式的结果。
    这里是引用
    例如:从键盘给n输入20后,则输出为s=534.188884。注意:n的值要求大于1但不大于100。

    #include<stdio.h>
    #include<math.h>
    double x(int n);
    int main()
    {
    	int i,n;
    	double sum = 0;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + x(i);
    	}
    	printf("%lf", sum);
    	return 0;
    }
    double x(int n)
    {
    	int i;
    	double result=0;
    	for (i = 1; i <= n; i++)
    	{
    		result = result + pow(i, 0.5);
    	}
    	return result;
    }
    

    15、麦穗问题

    [问题描述] 达伊尔麦穗问题:64个棋格,第一个1粒麦穗,第二个2粒麦穗,第三个4粒麦穗,后一个棋格放前一个棋格2倍的麦穗,问共有多少粒麦穗?
    [要求] 输出结果用 指数形式(%.4e 或 %.4le ) ,小数部分的小数位 保留 4 位。

    #include<stdio.h>
    int main()
    {
    	double x=1;
    	double sum = 0;						//2^64次方极大
    	int i;
    	for (i = 1; i <= 64; i++)
    	{
    		sum = sum + x;
    		x = x * 2;
    	}
    	printf("%.4le", sum);
    	return 0;
    }
    
    

    16、统计字符的个数

    输入一行字符,分别统计出其中的英文字母、数字、空格和其他字符的个数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    提示:空格就是ASCII表里面的SP字符,ASCII码值为32。

    #include<stdio.h>
    int  main()
    {
    	char c;
    	int english = 0, number = 0, space = 0, other = 0;
    	while (1)
    	{
    		c = getchar();
    		if (c == '\n')
    		{
    			break;
    		}
    		else if (c >= 'A' & c <= 'Z' || c >= 'a' & c <= 'z')
    		{
    			english++;
    		}
    		else if (c >= '0' && c <='9')
    		{
    			number++;
    		}
    		else if(c==' ')
    		{
    			space++;
    		}
    		else
    		{
    			other++;
    		}
    	}
    	printf("%d %d %d %d", english, number, space, other);
    	return 0;
    }
    

    17、学生的成绩,统计并输出优秀

    编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int score[1000] = { -1 };
    	int great = 0, pass = 0, fail = 0;
    	int i=0;
    	do
    	{
    		scanf("%d", &score[i]);
    		if (score[i] > 85)
    		{
    			great++;
    		}
    		else if (score[i] >= 60 && score[i] <= 84)
    		{
    			pass++;
    		}
    		else if (score[i] > 0 && score[i] <= 59)
    		{
    			fail++;
    		}
    		else
    		{
    			break;
    		}
    	} while (1);
    	printf(">=85:%d\n60-84:%d\n<60:%d", great, pass, fail);
    	return 0;
    }
    
    

    18、体操比赛打分

    假定某一大型比赛中有10名裁判同时为一名体操运动员打分,编写一个程序,输入这10名裁判的打分,输出去掉一个最高分和一个最低分后该运动员的平均得分。

    #include<stdio.h>
    int main()
    {
    	float score[10] = { 0 };
    	float max=0,min=0,sum=0;
    	float average = 0;
    	int i=0;
    	scanf("%f", &score[i]);
    	sum = score[0];
    	max = score[0];
    	min = score[0];
    	for (i = 1; i <10; i++)
    	{
    		scanf("%f", &score[i]);
    		if (score[i] > max)
    		{
    			max = score[i];
    		}
    		if (score[i] < min)
    		{
    			min = score[i];
    		}
    		sum = sum + score[i];
    	}
    	sum = sum - max - min;
    	average = sum / 8;
    	printf("%.3f %.3f %.3f", max, min, average);
    	return 0;
    }
    
    

    19、计算并输出多项式的值

    [问题]
    计算并输出下列多项式的值!例如:若从键盘给n输入8后,则输出0.662872。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int n,i;
    	float sum = 0;
    	scanf("%d", &n);
    	for (i = 1; i <= 2*n; i++)
    	{
    		sum = sum + pow(-1.0,i+1) / i;
    	}
    	printf("%f", sum);
    	return 0;
    }
    
    

    20、累加和倒数之和

    [问题描述]根据以下公式计算sum,n的值通过键盘输入。
    在这里插入图片描述

    #include<stdio.h>
    int sum(int i);
    int main()
    {
    	int n,i;
    	float result = 0;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		result = result + 1.0/sum(i);
    	}
    	printf("%f", result);
    	return 0;
    }
    int sum(int n)
    {
    	int i,sum=0;
    	for (i = 1; i <= n; i++)
    	{
    		sum += i;
    	}
    	return sum;
    }
    

    21、求一个正整数的因子和

    从键盘输入一个正整数,求它的所有因子的和,例如输入6,它的因子有1、2和3,所有因子的和为6

    #include<stdio.h>
    int main()
    {
    	int n,i;
    	int sum = 0;
    	scanf("%d", &n);
    	for (i = 1; i < n; i++)
    	{
    		if (n%i == 0)
    		{
    			sum += i;
    		}
    	}
    	printf("%d", sum);
    	return 0;
    }
    
    

    22、求最大公约数,最小公倍数

    输入两个正整数m和n,求其最大公约数和最小公倍数。

    #include<stdio.h>
    int main()
    {
    	int m,n,t,max,min=0,i,s;
    	scanf("%d%d", &m, &n);
    	if (m > n)
    	{
    		t = m;
    		m = n;
    		n = t;
    	}
    	for (i = 1; i <= m*n; i++)
    	{
    		if (m % i == 0 && n % i == 0)
    		{
    			max = i;
    		}
    		if (i % m == 0 && i % n == 0 && min==0)
    		{
    			min = i;
    		}
    	}
    	printf("%d %d", max, min);
    	return 0;
    }
    
    

    4、循环进阶

    1、换硬币问题

    将一笔零钱(大于8分,小于1元,精确到分)换成5分、2分和1分的硬币,要求每种硬币至少有一枚。输入金额,问有几种换法?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    注意:1分后面没有等号!!!!!

    #include<stdio.h>
    int main()
    {
    	float amount = 0;
    	int coin_5, coin_2, coin_1;							//顾名思义
    	scanf("%f", &amount);
    	for (coin_5 = 1; coin_5 <= 19; coin_5++)			//因为每种至少一个且总数小于100分,所以coin_5最多19个
    	{													//因为先输出5分1个,所以放外循环
    		for (coin_2 = 1; coin_2 <= 47; coin_2++)		//2分最多47个
    		{
    			for (coin_1 = 1; coin_1 <= 94; coin_1++)	//1分最多94个
    			{
    				if (coin_1 * 1 + coin_2 * 2 + coin_5 * 5 == amount * 100)	
    														//amount*100将元转化为分
    				{
    					printf("5分=%d个,2分=%d个,1分%d个\n", coin_5, coin_2, coin_1);
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    2、鸡兔同笼问题

    大约在1500年前,《孙子算经》中记载了这个有趣的问题:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    今有鸡兔同笼,上有35个头,下有94只足,请问鸡和兔各有几只?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    请编程序计算,将结果输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

    #include<stdio.h>
    int main()
    {
    	int x, y,n;	        		//设鸡x只,兔子y只,共n只
    	n=35;						
    	y = 1;						//一个从1开始++
    	x = n - y;					//另一个从n-1开始--
    	while (1)					//穷举法
    	{
    		if (2 * x + 4 * y == 94)
    		{
    			printf("鸡=%d只,兔=%d只",x,y);
    			break;
    		}
    		else
    		{
    			x--;
    			y++;
    		}
    	}
    	return 0;
    }
    

    3、九九乘法表

    利用双重循环输出九九乘法表,如下图所示,两列之间用转义字符’\t’对齐:
    在这里插入图片描述

    #include<stdio.h>
    int main()
    {
    	int i, j;
    	for (i = 1; i <= 9; i++)
    	{
    		for (j = 1; j <= i; j++)
    		{
    			printf("%d*%d=%d\t", j,i,i*j);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    

    4、输出素数

    描述
    输出1~n之间的所有素数,每行输出5个,用转义字符‘\t’对齐

    #include<stdio.h>
    int isprime(int x);
    int main()
    {
    	int i, n,count=0,sign;
    	scanf("%d", &n);
    	for (i = 2; i <= n; i++)
    	{
    		sign = isprime(i);			//判断是否素数,是返回1,否返回0
    		if (sign)
    		{
    			printf("%d\t", i);
    			count++;
    			if (count % 5 == 0)		//每五个数输出换行符
    			{
    				printf("\n");
    			}
    		}
    	}
    	return 0;
    }
    int isprime(int x)
    {
    	int i;
    	for (i = 2; i < x; i++)
    	{
    		if (x%i == 0)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    

    5、累加求和

    [试题描述]
    请编写程序计算并输出下列多项式的值,(建议利用双重循环;如果利用一重循环,累加时就要加条件)
    在这里插入图片描述

    long int fac(int i)				//涉及阶乘最好long int
    {
    	long int sum=1;
    	for (i; i >= 1; i--)
    	{
    		sum = sum * i;
    	}
    	return sum;
    }
    int main()
    {
        int n,i;
        double sum=0;
        scanf("%d",&n);
        for(i=1;i<=n;i+=2)
        {
            sum+= 1.0/fac(i);		//fac返回值为整数,所以用1.0/
        }
        printf("%lf",sum);
        return 0;
    }
    

    6、输出图形

    [问题描述] 输出图形
    ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬在这里插入图片描述
    [要求] 每一行仅仅输出星号左侧的空格,不要输出星号右侧的空格;

    #include<stdio.h>
    int main()
    {
    	int i, j,k=1;
    	for (i = 1; i <= 5; i++)
    	{
    		for (j = 4; j >= i; j--)
    		{
    			printf(" ");
    		}
    		
    		for (k = 1; k <= 2*(i-1)+1; k++)
    		{
    			printf("*");
    		}
    		printf("\n");
    	}
    	
    	return 0;
    }
    
    

    7、找出N之内的所有完数

    一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:

    #include<stdio.h>
    int jisuan(int x);
    int main()
    {
    	int i, j,n;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		if (jisuan(i) == i)
    		{
    			printf("%d its factors are ",i);
    			for (j = 1; j < i; j++)				//不包括本身,所以用<而不是<=
    			{
    				if (i % j == 0)
    				{
    					printf("%d ", j);
    				}
    			}
    			printf("\n");
    		}
    	}
    	
    	return 0;
    }
    int jisuan(int x)				//计算因数和
    {
    	int i, sum=0;
    	for (i = 1; i < x; i++)
    	{
    		if (x%i == 0)
    		{
    			sum += i;
    		}
    	}
    	return sum;
    }
    

    8、输出小于n的素数个数

    [问题描述] x为任意输入的整数,统计小于x的所有素数,输出所求素数的个数。

    #include<stdio.h>
    int isprime(int x);
    int main()
    {
    	int i, n, count = 0, sign;
    	scanf("%d", &n);
    	for (i = 2; i < n; i++)			//从2开始,到n-1结束
    	{
    		sign = isprime(i);
    		if (sign)
    		{
    			count++;		
    		}
    	}
    	printf("%d",count);
    	return 0;
    }
    int isprime(int x)
    {
    	int i;
    	for (i = 2; i < x; i++)
    	{
    		if (x%i == 0)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    

    9、输出紧靠m的k个素数

    [问题描述] 将大于整数m 且紧靠m的k个素数输出。例如,若输入17 5回车, 则应输出:19 23 29 31 37。
    [要求] 输出数据占4个宽度,输出格式为%4d 。

    #include<stdio.h>
    int isprime(int x);
    int main()
    {
    	int m, k,i,sign,count=0;
    	scanf("%d%d", &m, &k);
    	for (i = m+1;count<k; i++)
    	{
    		sign = isprime(i);
    		if (sign)
    		{
    		    count++;
    			printf("%4d",i);
    		}
    	}
    
    	return 0;
    }
    int isprime(int x)
    {
    	int i;
    	for (i = 2; i < x; i++)
    	{
    		if (x%i == 0)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    

    10、打印图形2

    在这里插入图片描述

    #include<stdio.h>
    int main()
    {
    	int i, j,k=1;
    	for (i = 1; i <= 4; i++)
    	{
    		for (j = 3; j >= i; j--)
    		{
    			printf(" ");
    		}
    		
    		for (k = 1; k <= 2*(i-1)+1; k++)
    		{
    			printf("*");
    		}
    		printf("\n");
    	}
    	
    	return 0;
    }
    
    
    展开全文
  • HUAWEI在线编程题库180

    千次阅读 2017-07-20 20:04:59
    华为在线编程题库180 写这个单纯就是一个记笔记的作用,还有就是可以总结一些新奇的思路。 题库链接华为机试 在线训练
  • java面试编程题

    2019-06-06 18:43:11
    面试编程题 https://blog.csdn.net/njnu_zhoubo/article/details/4663866
  • 360笔试编程题之第一题

    千次阅读 热门讨论 2016-03-28 22:31:58
    今晚做了360的在线笔试题,感觉题量还是挺大的,因为两个小时,有40道选择题,2道编程题,对我来说时间还是挺紧的。闲话不多说,我们聊聊这次编程题中的第一道。 (1) 题目数值游戏 Time Limit: 2000/1000 MS (Java/...
  • Android之算法编程题

    千次阅读 2016-10-11 12:14:41
    Android面试之编程题
  • python程序设计题库-python编程题库

    千次阅读 2020-10-30 22:57:11
    广告关闭2017年12月,云+社区对外发布,从最开始的...上期题目链接:1000道python题库系列分享十二(9道编程题)上期题目答案:? 本期题目:?...热烈庆祝2018年2月董付国老师《python程序设计(第2版)》出版18个月...
  • C语言课后编程题

    千次阅读 2018-11-06 22:22:49
    第1章课后编程题就一两句 所以就不整理笔记了 第2章 课后无编程题 故从第三章开始 1.编写一个程序,读入一个字母,输出与之对应的ASCLL码值。 我们可以得知: d,i 用来输入有符号的十进制整数; u 用来输入无...
  • 面试的时候,Interviewer 有时候会让Candidate 做一道上机编程题,大部分情况下,这类编程题都比较简单。试想一下,Interviewer给出一个需要几个小时才能完成的编程题,那么这一环节占用时间也太长了。但是,编程题...
  • 汇编语言编程题

    千次阅读 2018-06-27 22:06:30
    编程题:编程实现: S=1+2+3+……+100 ,要求计算后的结果存放在变量S里[试题解析] 循环控制可以分为:计数循环和条件循环。作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数...
  • 其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/107020657 浙大PTA-Python题库编程题 第二章(2.1~2.14)题解 ...浙大PTA-Python题库 编程题第三...
  • js数组经典面试编程题

    千次阅读 2019-03-08 21:50:20
    春招,秋招甚至是实习,多多少少会面临一些基础的编程题,这些编程题除了一些数据结构的典型情景,但是不能忽略,小看的也有一些基础编程题,如最简单的数组结构就有一些经典的编程题,这里进行简要的总结。...
  • 阿里巴巴在线笔试编程题2题

    千次阅读 热门讨论 2018-05-14 15:48:36
    前言:上周五参加了阿里巴巴的在线笔试,包含半小时10条选择题和一小时2条编程题。题目1:有两个非负数a和b,求两者的和。注意a和b可能是小数,输出结果不包含多于的0。输入:12.3 5输出:17.5参考代码:#include&...
  • 其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/107020657 浙大PTA-Python题库编程题 第二章(2.1~2.14)题解 ...浙大PTA-Python题库 编程题第三...
  • 阿里校招在线编程题

    万次阅读 2017-04-10 17:11:54
    2017校招阿里的在线编程题,全程30分钟。
  • OJ编程题教训

    千次阅读 2016-09-06 15:05:52
    如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。 2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.
  • 面向对象编程题汇总

    千次阅读 多人点赞 2018-06-06 21:08:21
    在授课面向对象这一章节的时候,发现找一些比较贴近的编程题还是比较难的,从网上整理了一下,希望对需要的朋友有帮助。很多是从网上找的,如果侵犯版权请联系我! 一、类和对象 1.定义一个类Demo,其中定义一个求...
  • c++经典编程题汇总

    万次阅读 多人点赞 2017-07-24 20:18:02
    《c++》编程题试卷 第三章 1.编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。 #include #include void...
  • 华为2018提前批笔试题编程题 java

    千次阅读 2018-08-08 21:32:40
    华为2018提前批笔试题编程题 第一题 题目描述 输入任意个字符串,将其中的小写字母变为大写,大写字母变为小写,其他字符不用处理; 输入描述: 任意字符串:abcd12#%XYZ 输出描述: 输出字符串:ABCD12#%...
  • 2020阿里笔试编程题

    千次阅读 2019-09-17 10:57:28
    选择题很难做,阿里的秋招貌似非常难,大部分岗位都留给了实习生,但是两道编程题不怎么难。 第一题 有一个n*n的地图,一只兔子想要穿过这个地图,给出的地图是一个二维数组map[i][j],数值表示该位置的毒雾持续时间...
  • 华为2020校招笔试编程题

    千次阅读 2019-09-30 03:47:48
    华为2020校招笔试编程题 刚做完华为的笔试题,简要描述一下三道编程题的解决方法以及python代码实现 第一题大致描述: 给定两个已经升序排序好的的序列A={a1,a2,a3,...an} 和B={b1,b2,b3...bn} ,一个数R,...
  • 《Linux环境编程》编程题答案

    千次阅读 2018-02-02 15:40:19
    (含有全部课后编程题答案以及以下五个实验报告) 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 免责申明:上传资料仅供学习交流使用,禁止一切不正当使用行为,如有事故本人概不负责
  • 2020 华为机试 三道编程题

    千次阅读 2019-09-25 21:28:00
    投的网络安全岗位,三道编程题。其实不难.... 测试用例都过了。但是.... 第一题,不太熟悉newcode输入输出,python用 for line in sys.stdin 读一行数据有问题,导致花了半个小时调试。 第二题由于多了一个print...
  • 深信服还是一如既往的“懒”,2018秋招的5个编程题在本次春招出现了三道,然后添加了一道新的编程题,且选择题和填空题基本与秋招的雷同,看来之前没看深信服2018校园招聘C++工程师编程题 - 题解的同学有点亏啊。...
  • 上台阶编程题

    千次阅读 2017-04-07 14:48:38
    京东编程题:上台阶 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n...
  • PTA作业6数组编程题

    千次阅读 2020-03-29 21:07:03
    PTA作业6数组编程题 7-1 【C0170】在键盘上输入N个整数,编写一个程序用选择排序算法实现从小到大排列 (10分) 在键盘上输入n(0<n<100)个整数,编写一个程序使该数组中的数按照从小到大的次序排列,用选择...
  • 今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题。1、 题目 2、 输入输出及样例 3、 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组input[][],模拟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,665
精华内容 35,066
关键字:

编程题